From c11a050314a0f9d9dafa57fa2daf1bbdfcad94da Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Sun, 25 Aug 2013 17:00:45 +0000 Subject: [PATCH] rip expat out of the build system. note that msvc/GPSBabel.vcxproj still needs to be updated to do this. --- gpsbabel/Makefile.in | 10 +- gpsbabel/cet_util.cc | 177 --- gpsbabel/cet_util.h | 57 - gpsbabel/config.h.in | 3 - gpsbabel/configure | 145 -- gpsbabel/configure.in | 85 -- gpsbabel/defs.h | 5 - gpsbabel/garmin_device_xml.h | 1728 ---------------------- gpsbabel/main.cc | 6 - gpsbabel/mingw/Makefile | 6 +- gpsbabel/mingw/README.expat | 1 - gpsbabel/mingw/include/expat.h | 1001 ------------- gpsbabel/mingw/includew/expat.h | 1013 ------------- gpsbabel/mingw/includew/expat_external.h | 115 -- gpsbabel/mingw/lib/README | 3 - gpsbabel/mingw/lib/libexpat.a | Bin 48984 -> 0 bytes gpsbabel/mingw/lib/libexpat.def | 64 - gpsbabel/mingw/libexpat.dll | Bin 143360 -> 0 bytes gpsbabel/mingw/libw/README | 1 - gpsbabel/mingw/libw/libexpat.a | Bin 51328 -> 0 bytes gpsbabel/msvc/Expat/expat.h | 1001 ------------- gpsbabel/msvc/Expat/libexpat.dll | Bin 143360 -> 0 bytes gpsbabel/msvc/Expat/libexpat.lib | Bin 16816 -> 0 bytes gpsbabel/msvc/Expatw/expat.h | 1013 ------------- gpsbabel/msvc/Expatw/expat_external.h | 115 -- gpsbabel/msvc/Expatw/libexpatw.dll | Bin 151552 -> 0 bytes gpsbabel/msvc/Expatw/libexpatw.lib | Bin 17544 -> 0 bytes gpsbabel/msvc/README.msvc | 9 +- gpsbabel/msvc/config.h | 3 +- gpsbabel/tools/gcfg | 4 +- gpsbabel/tools/mac-config | 4 +- gpsbabel/tools/mkdmg | 6 +- gpsbabel/tools/win-cross-config | 4 +- gpsbabel/tools/win-qtcreator-config | 4 +- 34 files changed, 19 insertions(+), 6564 deletions(-) delete mode 100644 gpsbabel/mingw/README.expat delete mode 100644 gpsbabel/mingw/include/expat.h delete mode 100644 gpsbabel/mingw/includew/expat.h delete mode 100644 gpsbabel/mingw/includew/expat_external.h delete mode 100644 gpsbabel/mingw/lib/README delete mode 100644 gpsbabel/mingw/lib/libexpat.a delete mode 100755 gpsbabel/mingw/lib/libexpat.def delete mode 100644 gpsbabel/mingw/libexpat.dll delete mode 100644 gpsbabel/mingw/libw/README delete mode 100644 gpsbabel/mingw/libw/libexpat.a delete mode 100644 gpsbabel/msvc/Expat/expat.h delete mode 100755 gpsbabel/msvc/Expat/libexpat.dll delete mode 100644 gpsbabel/msvc/Expat/libexpat.lib delete mode 100644 gpsbabel/msvc/Expatw/expat.h delete mode 100644 gpsbabel/msvc/Expatw/expat_external.h delete mode 100644 gpsbabel/msvc/Expatw/libexpatw.dll delete mode 100644 gpsbabel/msvc/Expatw/libexpatw.lib diff --git a/gpsbabel/Makefile.in b/gpsbabel/Makefile.in index 0bbf445fa..f8257a31f 100644 --- a/gpsbabel/Makefile.in +++ b/gpsbabel/Makefile.in @@ -141,10 +141,10 @@ WEB=@DOCDIR@ all: gpsbabel$(EXEEXT) gpsbabel$(EXEEXT): configure Makefile $(OBJS) @GPSBABEL_DEBUG@ - $(CXX) $(CFLAGS) $(LDFLAGS) $(OBJS) @LIBS@ @EXPAT_LIB@ $(QT_LIBS) @USB_LIBS@ $(OUTPUT_SWITCH)$@ + $(CXX) $(CFLAGS) $(LDFLAGS) $(OBJS) @LIBS@ $(QT_LIBS) @USB_LIBS@ $(OUTPUT_SWITCH)$@ gpsbabel-debug: $(OBJS) - $(CXX) $(CFLAGS) $(LDFLAGS) $(OBJS) @LIBS@ @EFENCE_LIB@ @EXPAT_LIB@ $(QT_LIBS) @USB_LIBS@ $(OUTPUT_SWITCH)$@ + $(CXX) $(CFLAGS) $(LDFLAGS) $(OBJS) @LIBS@ @EFENCE_LIB@ $(QT_LIBS) @USB_LIBS@ $(OUTPUT_SWITCH)$@ Makefile gbversion.h: Makefile.in config.status xmldoc/makedoc.in \ gbversion.h.in gui/setup.iss.in @@ -282,7 +282,7 @@ doc: gpsbabel $(WEB)/htmldoc-$(DOCVERSION)/index.html gpsbabel.pdf # readme.txt FORCE: # file list for windows package -WINFILES = gpsbabel.exe mingw/libexpat.dll win32/GPSBabelGUI.exe win32/gui-2/README.gui \ +WINFILES = gpsbabel.exe win32/GPSBabelGUI.exe win32/gui-2/README.gui \ README.contrib AUTHORS COPYING gpsbabel.html # @@ -343,13 +343,13 @@ release-rpm: # cross-configure: - CXX=i386-mingw32-gcc LDFLAGS="-s" @srcdir@/configure --host=i386-pc-mingw32 --with-cet=all --with-expathdr=@srcdir@/mingw/include --with-libexpat=@srcdir@/mingw/lib + CXX=i386-mingw32-gcc LDFLAGS="-s" @srcdir@/configure --host=i386-pc-mingw32 --with-cet=all release-winbuild: rm -fr /tmp/gpsbabel-$(VERSIOND)-cross cp -a gpsbabel-$(VERSIOND) /tmp/gpsbabel-$(VERSIOND)-cross cd /tmp/gpsbabel-$(VERSIOND)-cross ; \ - CXX=i386-mingw32-gcc LDFLAGS="-s" ./configure --host=i386-pc-mingw32 --with-cet=all --with-expathdr=mingw/include --with-libexpat=mingw/lib && make && \ + CXX=i386-mingw32-gcc LDFLAGS="-s" ./configure --host=i386-pc-mingw32 --with-cet=all && make && \ zip -j /tmp/gpsbabel-$(VERSIOND).zip $(WINFILES) rm -fr /tmp/gpsbabel-$(VERSIOND)-cross diff --git a/gpsbabel/cet_util.cc b/gpsbabel/cet_util.cc index 851254b34..7f2c314b3 100644 --- a/gpsbabel/cet_util.cc +++ b/gpsbabel/cet_util.cc @@ -30,10 +30,6 @@ #include "cet.h" #include "cet_util.h" -#if HAVE_LIBEXPAT -# include -#endif - #define MYNAME "cet_util" static cet_cs_vec_t* cet_cs_vec_root = NULL; @@ -140,55 +136,6 @@ cet_str_utf8_to_uni(const char* src, int* length) /* helpers */ -/* %%% %%% - * - * - */ -#if HAVE_LIBEXPAT -int XMLCALL cet_lib_expat_UnknownEncodingHandler(void* data, const XML_Char* xml_encoding, XML_Encoding* info) -{ - cet_cs_vec_t* cs; - int i, c, ucs4_def; - const char* encoding; - - encoding = xml_convert_to_char_string(xml_encoding); - cs = cet_find_cs_by_name(encoding); - if (cs == NULL) { - return XML_STATUS_ERROR; /* fatal(MYNAME ": Unknown character set \"%s\"!\n", encoding); */ - } - - cet_char_to_ucs4(CET_NOT_CONVERTABLE_DEFAULT, cs, &ucs4_def); - - for (i = 0; i < cs->ucs4_offset; i++) { - info->map[i] = i; /* equal to ascii part */ - } - for (i = 0; i < cs->ucs4_count; i++) { /* mixed table */ - c = cs->ucs4_map[i]; - if (c == -1) { - c = ucs4_def; - } - info->map[i + cs->ucs4_offset] = c; - } - for (i = cs->ucs4_offset + cs->ucs4_count; i < 256; i++) { - info->map[i] = ucs4_def; /* non convertable trailer */ - } - - info->data = NULL; - info->convert = NULL; - info->release = NULL; - - cet_convert_init(CET_CHARSET_UTF8, 1); /* We do not need to transform any string */ - - if (global_opts.verbose_status > 0) { - printf(MYNAME ": XML parser - encoding handler for character set \"%s\" established.\n", encoding); - } - - xml_free_converted_string(encoding); - return XML_STATUS_OK; -} -#endif - - char* cet_str_uni_to_any(const short* src, int length, const cet_cs_vec_t* dest_vec) { @@ -1239,127 +1186,3 @@ int cet_gbfprintf(gbfile* stream, const cet_cs_vec_t* src_vec, const char* fmt, return res; } - -/* - * 'str' points to an array of XML_Chars which may be UNICODE16 - * words in native endianness. - */ - -const char* xml_convert_to_char_string_n(const XML_Char* src, int* n) -{ -#ifdef XML_UNICODE - char* utf8; - char* utf8b; - int i, j; - - /* - * '*n' is the number of source bytes. - * Walk over that, converting each character and - * discarding it, but tallying 'i' as the number of - * bytes in the destination string. - */ - i = 0; - for (j = 0; j < *n; j++) { - i += cet_ucs4_to_utf8(NULL, 6, src[j]); - } - - /* Update output byte count in caller. */ - *n = i; - - /* Appropriately size (not zero terminated) buffer */ - utf8 = utf8b = (char*)xmalloc(i); - - for (j = 0; utf8 < utf8b + i; j++) { - utf8 += cet_ucs4_to_utf8(utf8, 6, src[j]); - } - - return utf8b; -#else - return src; -#endif -} - -/* - * 'str' points to NULL terminated string of XML_Chars which - * may be UNICODE16 words in native endianness. - */ - -const char* xml_convert_to_char_string(const XML_Char* src) -{ -#ifdef XML_UNICODE - char* utf8; - char* utf8b; - int i, j; - const XML_Char* in = src; - - /* Walk source array until we find source terminator */ - i = 0; - for (j = 0; src[j]; j++) { - i += cet_ucs4_to_utf8(NULL, 6, src[j]); - } - - /* We return a NUL terminated string. */ - utf8 = utf8b = (char*)xmalloc(i + 1); - in = src; - - for (j = 0; utf8 < utf8b + i; j++) { - utf8 += cet_ucs4_to_utf8(utf8, 6, src[j]); - } - *utf8 = '\0'; - - return utf8b; - -#else - return src; -#endif -} - - -void xml_free_converted_string(const char* str) -{ -#ifdef XML_UNICODE - xfree((void*) str); -#endif -} - -const char** xml_convert_attrs_to_char_string(const XML_Char** xml_attr) -{ -#ifdef XML_UNICODE - // First count size of array - int size = 0; - int i; - const XML_Char** ptr; - const char** char_attrs; - - if (xml_attr == NULL) { - return NULL; - } - - for (ptr = xml_attr; *ptr != NULL; ++ptr) { - ++size; - } - - // Allocate space - char_attrs = (const char**)xmalloc((size + 1) * sizeof(char*)); - - // Duplicate strings - for (i = 0; i < size; ++i) { - char_attrs[i] = xml_convert_to_char_string(xml_attr[i]); - } - char_attrs[size] = NULL; - - return char_attrs; -#else - return xml_attr; -#endif -} - -void xml_free_converted_attrs(const char** attr) -{ -#ifdef XML_UNICODE - while (attr != NULL && *attr != NULL) { - xfree((void*)*attr); - ++attr; - } -#endif -} diff --git a/gpsbabel/cet_util.h b/gpsbabel/cet_util.h index bc2ea1466..1d437d0b6 100644 --- a/gpsbabel/cet_util.h +++ b/gpsbabel/cet_util.h @@ -28,12 +28,6 @@ #include "config.h" #endif -#if HAVE_LIBEXPAT -# include -#else -typedef char XML_Char; -#endif - #include "cet.h" cet_cs_vec_t* cet_find_cs_by_name(const char* name); @@ -63,42 +57,6 @@ short* cet_str_utf8_to_uni(const char* src, int* length); extern cet_cs_vec_t cet_cs_vec_utf8; -/* Missing defines in older expat libraries | CET-REVIEW */ - -/* Taken from expat_external.h (Expat 1.95.7) */ - -#ifndef XML_STATUS_OK -# define XML_STATUS_OK 1 -#endif -#ifndef XML_STATUS_ERROR -# define XML_STATUS_ERROR 0 -#endif - - -#ifndef XMLCALL -#if defined(XML_USE_MSC_EXTENSIONS) -#define XMLCALL __cdecl -#elif defined(__GNUC__) && defined(__i386) -#define XMLCALL __attribute__((cdecl)) -#else -/* For any platform which uses this definition and supports more than - one calling convention, we need to extend this definition to - declare the convention used on that platform, if it's possible to - do so. - - If this is the case for your platform, please file a bug report - with information on how to identify your platform via the C - pre-processor and how to specify the same calling convention as the - platform's malloc() implementation. -*/ -#define XMLCALL -#endif -#endif /* not defined XMLCALL */ - -#if HAVE_LIBEXPAT -int XMLCALL cet_lib_expat_UnknownEncodingHandler(void* data, const XML_Char* encoding, XML_Encoding* info); -#endif - /* helpers */ char* cet_str_uni_to_any(const short* src, int length, const cet_cs_vec_t* dest_vec); @@ -119,19 +77,4 @@ void cet_convert_deinit(void); void cet_disp_character_set_names(FILE* fout); -/* - * Conversion from XML_Char string to char string. If XML_Char is the - * same as char, these routines do nothing. If XML_Char is a wide - * character, xml_convert_to_char_string converts the string to a - * newly allocated char string, and xml_free_converted_string frees - * it. - */ - -const char* xml_convert_to_char_string_n(const XML_Char* str, int* nbytes); -const char* xml_convert_to_char_string(const XML_Char* str); -void xml_free_converted_string(const char* str); - -const char** xml_convert_attrs_to_char_string(const XML_Char** xml_attr); -void xml_free_converted_attrs(const char** attr); - #endif diff --git a/gpsbabel/config.h.in b/gpsbabel/config.h.in index 18a7c51c0..4288c9467 100644 --- a/gpsbabel/config.h.in +++ b/gpsbabel/config.h.in @@ -9,9 +9,6 @@ /* 1 to enable all the filters. */ #undef FILTERS_ENABLED -/* Defined if you have libexpat */ -#undef HAVE_LIBEXPAT - /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM diff --git a/gpsbabel/configure b/gpsbabel/configure index 77a43587f..f025e8037 100755 --- a/gpsbabel/configure +++ b/gpsbabel/configure @@ -629,7 +629,6 @@ DOCDIR INSTALL_DEBUG GPSBABEL_DEBUG EFENCE_LIB -EXPAT_LIB ZLIB GBSER OSJEEPS @@ -727,8 +726,6 @@ enable_csv enable_most enable_filters with_zlib -with_expathdr -with_libexpat enable_efence with_doc ' @@ -1370,8 +1367,6 @@ Optional Packages: --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-cet=(default,all,minimal) --with-zlib=(included)|system|no - --with-expathdr=DIR Use this to specify the location of expat.h - --with-libexpat=DIR Use this to specify expat library . --with-doc=DIR Path where the documentation will be stored. Some influential environment variables: @@ -4767,146 +4762,6 @@ $as_echo_n "checking for random stuff to make you feel better... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } - -# Check whether --with-expathdr was given. -if test "${with_expathdr+set}" = set; then : - withval=$with_expathdr; xpathdr="$withval" -else - - case "$target" in - *-*-darwin6*|*-*-darwin7*|*-*-darwin8*) - # Restrict test to OS/X 10.4 and earlier. Leopard (10.5) - # provides expat and in a sensible location. - if test -f /sw/include/expat.h ; then - xpathdr=/sw/include/ - fi - ;; - *-gentoo-freebsd*) - ;; - *-*-freebsd*) - if test -f /usr/local/include/expat.h ; then - xpathdr=/usr/local/include - fi - ;; - *) ;; - esac - - -fi - - -if test "x-$xpathdr" != "x-" ; then - CFLAGS="$CFLAGS -I$xpathdr" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5 -$as_echo_n "checking for libexpat... " >&6; } - -# Check whether --with-libexpat was given. -if test "${with_libexpat+set}" = set; then : - withval=$with_libexpat; - # If the developer specified a reference - # to a FILE and not a directory, assume they are a highly - # trained professional that has specified a .a to to be used. - if test -f $withval ; then - EXPAT_LIB=$withval - else - CFLAGS="$CFLAGS -L$withval" - EXPAT_LIB="-L$withval -lexpat" - fi - -else - - case "$target" in - *-*-darwin6*|*-*-darwin7*|*-*-darwin8*) - # Restrict test to OS/X 10.4 and earlier. Leopard (10.5) - # provides expat and in a sensible location. - if test -f /sw/lib/libexpat.a ; then - # libexpat installed via fink - EXPAT_LIB=/sw/lib/libexpat.a - LIBS="$LIBS -L/sw/lib" - fi - if test -f /opt/local/lib/libexpat.a ; then - # libexpat installed via macports - EXPAT_LIB=/opt/local/lib/libexpat.a - LIBS="$LIBS -L/opt/local/lib" - fi - if test -f /usr/local/lib/libexpat.a ; then - # libexpat installed from source - EXPAT_LIB=/usr/local/lib/libexpat.a - LIBS="$LIBS -L/usr/local/lib" - fi - ;; - *-gentoo-freebsd*) - EXPAT_LIB=-lexpa - ;; - *-*-freebsd*) - if test -f /usr/local/lib/libexpat.a ; then - EXPAT_LIB=/usr/local/lib/libexpat.a - fi - ;; - esac - - -fi - - -if ! test "x${EXPAT_LIB}" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPAT_LIB" >&5 -$as_echo "$EXPAT_LIB" >&6; } - -$as_echo "#define HAVE_LIBEXPAT 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: try to autodetect" >&5 -$as_echo "try to autodetect" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML_ParserCreate in -lexpat" >&5 -$as_echo_n "checking for XML_ParserCreate in -lexpat... " >&6; } -if ${ac_cv_lib_expat_XML_ParserCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lexpat $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XML_ParserCreate (); -int -main () -{ -return XML_ParserCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_expat_XML_ParserCreate=yes -else - ac_cv_lib_expat_XML_ParserCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_expat_XML_ParserCreate" >&5 -$as_echo "$ac_cv_lib_expat_XML_ParserCreate" >&6; } -if test "x$ac_cv_lib_expat_XML_ParserCreate" = xyes; then : - -$as_echo "#define HAVE_LIBEXPAT 1" >>confdefs.h - - EXPAT_LIB=-lexpat - -fi - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for efence" >&5 $as_echo_n "checking for efence... " >&6; } # Check whether --enable-efence was given. diff --git a/gpsbabel/configure.in b/gpsbabel/configure.in index 352014fb0..5ebd0d379 100644 --- a/gpsbabel/configure.in +++ b/gpsbabel/configure.in @@ -279,91 +279,6 @@ esac AC_MSG_CHECKING(for random stuff to make you feel better) AC_MSG_RESULT(failed) -AC_ARG_WITH(expathdr, - [ --with-expathdr[=DIR] Use this to specify the location of expat.h], - [ xpathdr="$withval" ], [ - case "$target" in - *-*-darwin6*|*-*-darwin7*|*-*-darwin8*) - # Restrict test to OS/X 10.4 and earlier. Leopard (10.5) - # provides expat and in a sensible location. - if test -f /sw/include/expat.h ; then - xpathdr=/sw/include/ - fi - ;; - *-gentoo-freebsd*) - ;; - *-*-freebsd*) - if test -f /usr/local/include/expat.h ; then - xpathdr=/usr/local/include - fi - ;; - *) ;; - esac -] -) - -if test "x-$xpathdr" != "x-" ; then - CFLAGS="$CFLAGS -I$xpathdr" -fi - -AC_MSG_CHECKING(for libexpat) -AC_ARG_WITH(libexpat, - [ --with-libexpat[=DIR] Use this to specify expat library .], - [ - # If the developer specified a reference - # to a FILE and not a directory, assume they are a highly - # trained professional that has specified a .a to to be used. - if test -f $withval ; then - EXPAT_LIB=$withval - else - CFLAGS="$CFLAGS -L$withval" - EXPAT_LIB="-L$withval -lexpat" - fi - ], [ - case "$target" in - *-*-darwin6*|*-*-darwin7*|*-*-darwin8*) - # Restrict test to OS/X 10.4 and earlier. Leopard (10.5) - # provides expat and in a sensible location. - if test -f /sw/lib/libexpat.a ; then - # libexpat installed via fink - EXPAT_LIB=/sw/lib/libexpat.a - LIBS="$LIBS -L/sw/lib" - fi - if test -f /opt/local/lib/libexpat.a ; then - # libexpat installed via macports - EXPAT_LIB=/opt/local/lib/libexpat.a - LIBS="$LIBS -L/opt/local/lib" - fi - if test -f /usr/local/lib/libexpat.a ; then - # libexpat installed from source - EXPAT_LIB=/usr/local/lib/libexpat.a - LIBS="$LIBS -L/usr/local/lib" - fi - ;; - *-gentoo-freebsd*) - EXPAT_LIB=-lexpa - ;; - *-*-freebsd*) - if test -f /usr/local/lib/libexpat.a ; then - EXPAT_LIB=/usr/local/lib/libexpat.a - fi - ;; - esac - ] -) - -if ! test "x${EXPAT_LIB}" = x; then - AC_MSG_RESULT($EXPAT_LIB) - AC_DEFINE(HAVE_LIBEXPAT, 1, [Defined if you have libexpat]) -else - AC_MSG_RESULT(try to autodetect) - AC_CHECK_LIB([expat], [XML_ParserCreate], - AC_DEFINE(HAVE_LIBEXPAT, 1, [Defined if you have libexpat]) - EXPAT_LIB=-lexpat - ) -fi -AC_SUBST(EXPAT_LIB) - AC_MSG_CHECKING(for efence) AC_ARG_ENABLE(efence, [ --enable-efence=[yes|(no)]], diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index 8609bf699..fa00c2877 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -41,11 +41,6 @@ # include "src/core/datetime.h" -// Turn on Unicode in expat? -#ifdef _UNICODE -# define XML_UNICODE -#endif - #define CSTR(qstr) (qstr.toUtf8().constData()) #define CSTRE_(qstr, enc) (enc->fromUnicode(qstr).constData()) #define CSTRE(qstr) (CSTRE_(qstr, codec)) diff --git a/gpsbabel/garmin_device_xml.h b/gpsbabel/garmin_device_xml.h index 4ee325c6b..29f0e0964 100644 --- a/gpsbabel/garmin_device_xml.h +++ b/gpsbabel/garmin_device_xml.h @@ -54,1731 +54,3 @@ const gdx_info* gdx_find_file(char** dirlist); #include extern jmp_buf gdx_jmp_buf; -#if 0 - -/* - * The file-level information. - */ -static -struct gpx_global { - gpx_global_entry name; - gpx_global_entry desc; - gpx_global_entry author; - gpx_global_entry email; - gpx_global_entry url; - gpx_global_entry urlname; - gpx_global_entry keywords; - /* time and bounds aren't here; they're recomputed. */ -}* gpx_global ; - -static void -gpx_add_to_global(gpx_global_entry* ge, char* cdata) -{ - queue* elem, *tmp; - gpx_global_entry* gep; - - QUEUE_FOR_EACH(&ge->queue, elem, tmp) { - gep = BASE_STRUCT(elem, gpx_global_entry, queue); - if (0 == strcmp(cdata, gep->tagdata)) { - return; - } - } - - gep = xcalloc(sizeof(*gep), 1); - QUEUE_INIT(&gep->queue); - gep->tagdata = xstrdup(cdata); - ENQUEUE_TAIL(&ge->queue, &gep->queue); -} - -static void -gpx_rm_from_global(gpx_global_entry* ge) -{ - queue* elem, *tmp; - - QUEUE_FOR_EACH(&ge->queue, elem, tmp) { - gpx_global_entry* g = (gpx_global_entry*) dequeue(elem); - xfree(g->tagdata); - xfree(g); - } -} - -static void -gpx_write_gdata(gpx_global_entry* ge, char* tag) -{ - queue* elem, *tmp; - gpx_global_entry* gep; - - if (!gpx_global || QUEUE_EMPTY(&ge->queue)) { - return; - } - - gbfprintf(ofd, "<%s>", tag); - QUEUE_FOR_EACH(&ge->queue, elem, tmp) { - gep = BASE_STRUCT(elem, gpx_global_entry, queue); - gbfprintf(ofd, "%s", gep->tagdata); - /* Some tags we just output once. */ - if ((0 == strcmp(tag, "url")) || - (0 == strcmp(tag, "email"))) { - break; - } - gbfprintf(ofd, " "); - } - gbfprintf(ofd, "\n", tag); -} - - -typedef struct tag_mapping { - tag_type tag_type; /* enum from above for this tag */ - int tag_passthrough; /* true if we don't generate this */ - const char* tag_name; /* xpath-ish tag name */ - unsigned long crc; /* Crc32 of tag_name */ -} tag_mapping; - -/* - * xpath(ish) mappings between full tag paths and internal identifers. - * These appear in the order they appear in the GPX specification. - * If it's not a tag we explictly handle, it doesn't go here. - */ - -tag_mapping tag_path_map[] = { - { tt_gpx, 0, "/gpx", 0UL }, - { tt_name, 0, "/gpx/name", 0UL }, - { tt_desc, 0, "/gpx/desc", 0UL }, - { tt_author, 0, "/gpx/author", 0UL }, - { tt_email, 0, "/gpx/email", 0UL }, - { tt_url, 0, "/gpx/url", 0UL }, - { tt_urlname, 0, "/gpx/urlname", 0UL }, - { tt_keywords, 0, "/gpx/keywords", 0UL }, - - { tt_wpt, 0, "/gpx/wpt", 0UL }, - { tt_wpt_ele, 0, "/gpx/wpt/ele", 0UL }, - { tt_wpt_time, 0, "/gpx/wpt/time", 0UL }, - { tt_wpt_name, 0, "/gpx/wpt/name", 0UL }, - { tt_wpt_cmt, 0, "/gpx/wpt/cmt", 0UL }, - { tt_wpt_desc, 0, "/gpx/wpt/desc", 0UL }, - { tt_wpt_url, 0, "/gpx/wpt/url", 0UL }, - { tt_wpt_urlname, 0, "/gpx/wpt/urlname", 0UL }, - { tt_wpt_link, 0, "/gpx/wpt/link", 0UL }, /* GPX 1.1 */ - { tt_wpt_link_text, 0, "/gpx/wpt/link/text", 0UL }, /* GPX 1.1 */ - { tt_wpt_sym, 0, "/gpx/wpt/sym", 0UL }, - { tt_wpt_type, 1, "/gpx/wpt/type", 0UL }, - - /* Double up the GPX 1.0 and GPX 1.1 styles */ -#define GEOTAG(type,name) \ - {type, 1, "/gpx/wpt/groundspeak:cache/groundspeak:" name, 0UL }, \ - {type, 1, "/gpx/wpt/extensions/cache/" name, 0UL }, \ - {type, 1, "/gpx/wpt/geocache/" name, 0UL } /* opencaching.de */ - -#define GARMIN_WPT_EXT "/gpx/wpt/extensions/gpxx:WaypointExtension" - -// GEOTAG( tt_cache, "cache"), - { tt_cache, 1, "/gpx/wpt/groundspeak:cache" }, - - GEOTAG(tt_cache_name, "name"), - GEOTAG(tt_cache_container, "container"), - GEOTAG(tt_cache_type, "type"), - GEOTAG(tt_cache_difficulty, "difficulty"), - GEOTAG(tt_cache_terrain, "terrain"), - GEOTAG(tt_cache_hint, "encoded_hints"), - GEOTAG(tt_cache_hint, "hints"), /* opencaching.de */ - GEOTAG(tt_cache_desc_short, "short_description"), - GEOTAG(tt_cache_desc_long, "long_description"), - GEOTAG(tt_cache_placer, "owner"), - { tt_cache_log_wpt, 1, "/gpx/wpt/groundspeak:cache/groundspeak:logs/groundspeak:log/groundspeak:log_wpt"}, - { tt_cache_log_wpt, 1, "/gpx/wpt/extensions/cache/logs/log/log_wpt"}, - { tt_cache_log_type, 1, "/gpx/wpt/groundspeak:cache/groundspeak:logs/groundspeak:log/groundspeak:type"}, - { tt_cache_log_type, 1, "/gpx/wpt/extensions/cache/logs/log/type"}, - { tt_cache_log_date, 1, "/gpx/wpt/groundspeak:cache/groundspeak:logs/groundspeak:log/groundspeak:date"}, - { tt_cache_log_date, 1, "/gpx/wpt/extensions/cache/logs/log/date"}, - - { tt_wpt_extensions, 0, "/gpx/wpt/extensions", 0UL }, - - { tt_garmin_wpt_extensions, 0, GARMIN_WPT_EXT, 0UL }, - { tt_garmin_wpt_proximity, 0, GARMIN_WPT_EXT "/gpxx:Proximity", 0UL }, - { tt_garmin_wpt_temperature, 0, GARMIN_WPT_EXT "/gpxx:Temperature", 0UL }, - { tt_garmin_wpt_depth, 0, GARMIN_WPT_EXT "/gpxx:Depth", 0UL }, - { tt_garmin_wpt_display_mode, 0, GARMIN_WPT_EXT "/gpxx:DisplayMode", 0UL }, - { tt_garmin_wpt_categories, 0, GARMIN_WPT_EXT "/gpxx:Categories", 0UL }, - { tt_garmin_wpt_category, 0, GARMIN_WPT_EXT "/gpxx:Categories/gpxx:Category", 0UL }, - { tt_garmin_wpt_addr, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:StreetAddress", 0UL }, - { tt_garmin_wpt_city, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:City", 0UL }, - { tt_garmin_wpt_state, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:State", 0UL }, - { tt_garmin_wpt_country, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:Country", 0UL }, - { tt_garmin_wpt_postal_code, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:PostalCode", 0UL }, - { tt_garmin_wpt_phone_nr, 0, GARMIN_WPT_EXT "/gpxx:PhoneNumber", 0UL }, - - { tt_rte, 0, "/gpx/rte", 0UL }, - { tt_rte_name, 0, "/gpx/rte/name", 0UL }, - { tt_rte_desc, 0, "/gpx/rte/desc", 0UL }, - { tt_rte_number, 0, "/gpx/rte/number", 0UL }, - { tt_rte_rtept, 0, "/gpx/rte/rtept", 0UL }, - { tt_rte_rtept_ele, 0, "/gpx/rte/rtept/ele", 0UL }, - { tt_rte_rtept_time, 0, "/gpx/rte/rtept/time", 0UL }, - { tt_rte_rtept_name, 0, "/gpx/rte/rtept/name", 0UL }, - { tt_rte_rtept_cmt, 0, "/gpx/rte/rtept/cmt", 0UL }, - { tt_rte_rtept_desc, 0, "/gpx/rte/rtept/desc", 0UL }, - { tt_rte_rtept_url, 0, "/gpx/rte/rtept/url", 0UL }, - { tt_rte_rtept_urlname, 0, "/gpx/rte/rtept/urlname", 0UL }, - { tt_rte_rtept_sym, 0, "/gpx/rte/rtept/sym", 0UL }, - - { tt_trk, 0, "/gpx/trk", 0UL }, - { tt_trk_name, 0, "/gpx/trk/name", 0UL }, - { tt_trk_desc, 0, "/gpx/trk/desc", 0UL }, - { tt_trk_trkseg, 0, "/gpx/trk/trkseg", 0UL }, - { tt_trk_number, 0, "/gpx/trk/number", 0UL }, - { tt_trk_trkseg_trkpt, 0, "/gpx/trk/trkseg/trkpt", 0UL }, - { tt_trk_trkseg_trkpt_ele, 0, "/gpx/trk/trkseg/trkpt/ele", 0UL }, - { tt_trk_trkseg_trkpt_time, 0, "/gpx/trk/trkseg/trkpt/time", 0UL }, - { tt_trk_trkseg_trkpt_name, 0, "/gpx/trk/trkseg/trkpt/name", 0UL }, - { tt_trk_trkseg_trkpt_cmt, 0, "/gpx/trk/trkseg/trkpt/cmt", 0UL }, - { tt_trk_trkseg_trkpt_desc, 0, "/gpx/trk/trkseg/trkpt/desc", 0UL }, - { tt_trk_trkseg_trkpt_url, 0, "/gpx/trk/trkseg/trkpt/url", 0UL }, - { tt_trk_trkseg_trkpt_urlname, 0, "/gpx/trk/trkseg/trkpt/urlname", 0UL }, - { tt_trk_trkseg_trkpt_sym, 0, "/gpx/trk/trkseg/trkpt/sym", 0UL }, - { tt_trk_trkseg_trkpt_course, 0, "/gpx/trk/trkseg/trkpt/course", 0UL }, - { tt_trk_trkseg_trkpt_speed, 0, "/gpx/trk/trkseg/trkpt/speed", 0UL }, - - /* Common to tracks, routes, and waypts */ - { tt_fix, 0, "/gpx/wpt/fix", 0UL }, - { tt_fix, 0, "/gpx/trk/trkseg/trkpt/fix", 0UL }, - { tt_fix, 0, "/gpx/rte/rtept/fix", 0UL }, - { tt_sat, 0, "/gpx/wpt/sat", 0UL }, - { tt_sat, 0, "/gpx/trk/trkseg/trkpt/sat", 0UL }, - { tt_sat, 0, "/gpx/rte/rtept/sat", 0UL }, - { tt_pdop, 0, "/gpx/wpt/pdop", 0UL }, - { tt_pdop, 0, "/gpx/trk/trkseg/trkpt/pdop", 0UL }, - { tt_pdop, 0, "/gpx/rte/rtept/pdop", 0UL }, - { tt_hdop, 0, "/gpx/wpt/hdop", 0UL }, - { tt_hdop, 0, "/gpx/trk/trkseg/trkpt/hdop", 0UL }, - { tt_hdop, 0, "/gpx/rte/rtept/hdop", 0UL }, - { tt_vdop, 0, "/gpx/wpt/vdop", 0UL }, - { tt_vdop, 0, "/gpx/trk/trkseg/trkpt/vdop", 0UL }, - { tt_vdop, 0, "/gpx/rte/rtept/hdop", 0UL }, - {0, 0, NULL, 0UL} -}; - -static tag_type -get_tag(const char* t, int* passthrough) -{ - tag_mapping* tm; - unsigned long tcrc = get_crc32_s(t); - - for (tm = tag_path_map; tm->tag_type != 0; tm++) { - if ((tcrc == tm->crc) && (0 == strcmp(tm->tag_name, t))) { - *passthrough = tm->tag_passthrough; - return tm->tag_type; - } - } - *passthrough = 1; - return tt_unknown; -} - -static void -prescan_tags(void) -{ - tag_mapping* tm; - for (tm = tag_path_map; tm->tag_type != 0; tm++) { - tm->crc = get_crc32_s(tm->tag_name); - } -} - -static void -tag_gpx(const char** attrv) -{ - const char** avp; - for (avp = &attrv[0]; *avp; avp += 2) { - if (strcmp(avp[0], "version") == 0) { - gpx_version = avp[1]; - } else if (strcmp(avp[0], "src") == 0) { - gpx_creator = avp[1]; - } - /* - * Our handling of schemaLocation really is weird. - * If we see we have a "normal" GPX 1.1 header, on read, - * flip our default on write to use that and don't append - * it to the rest... - */ - else if (strcmp(avp[0], "xsi:schemaLocation") == 0) { - if (0 == strcmp(avp[1], DEFAULT_XSI_SCHEMA_LOC_11)) { - if (0 == strcmp(xsi_schema_loc, DEFAULT_XSI_SCHEMA_LOC)) { - xfree(xsi_schema_loc); - } - xsi_schema_loc = xstrdup(DEFAULT_XSI_SCHEMA_LOC_11); - continue; - } - if (0 == strstr(xsi_schema_loc, avp[1])) { - xsi_schema_loc = xstrappend(xsi_schema_loc, " "); - xsi_schema_loc = xstrappend(xsi_schema_loc, avp[1]); - } - } - } -} - -static void -tag_wpt(const char** attrv) -{ - const char** avp = &attrv[0]; - - wpt_tmp = waypt_new(); - - cur_tag = NULL; - while (*avp) { - if (strcmp(avp[0], "lat") == 0) { - sscanf(avp[1], "%lf", - &wpt_tmp->latitude); - } else if (strcmp(avp[0], "lon") == 0) { - sscanf(avp[1], "%lf", - &wpt_tmp->longitude); - } - avp+=2; - } - fs_ptr = &wpt_tmp->fs; -} - -static void -tag_cache_desc(const char** attrv) -{ - const char** avp; - - cache_descr_is_html = 0; - for (avp = &attrv[0]; *avp; avp+=2) { - if (strcmp(avp[0], "html") == 0) { - if (strcmp(avp[1], "True") == 0) { - cache_descr_is_html = 1; - } - } - } -} - -static void -tag_gs_cache(const char** attrv) -{ - const char** avp; - - for (avp = &attrv[0]; *avp; avp+=2) { - if (strcmp(avp[0], "id") == 0) { - wpt_tmp->gc_data.id = atoi(avp[1]); - } else if (strcmp(avp[0], "available") == 0) { - if (case_ignore_strcmp(avp[1], "True") == 0) { - wpt_tmp->gc_data.is_available = status_true; - } else if (case_ignore_strcmp(avp[1], "False") == 0) { - wpt_tmp->gc_data.is_available = status_false; - } - } else if (strcmp(avp[0], "archived") == 0) { - if (case_ignore_strcmp(avp[1], "True") == 0) { - wpt_tmp->gc_data.is_archived = status_true; - } else if (case_ignore_strcmp(avp[1], "False") == 0) { - wpt_tmp->gc_data.is_archived = status_false; - } - } - } -} - -static void -start_something_else(const char* el, const char** attrv) -{ - const char** avp = attrv; - char** avcp = NULL; - int attr_count = 0; - xml_tag* new_tag; - fs_xml* fs_gpx; - - if (!fs_ptr) { - return; - } - - new_tag = (xml_tag*)xcalloc(sizeof(xml_tag),1); - new_tag->tagname = xstrdup(el); - - /* count attributes */ - while (*avp) { - attr_count++; - avp++; - } - - /* copy attributes */ - avp = attrv; - new_tag->attributes = (char**)xcalloc(sizeof(char*),attr_count+1); - avcp = new_tag->attributes; - while (*avp) { - *avcp = xstrdup(*avp); - avcp++; - avp++; - } - *avcp = NULL; - - if (cur_tag) { - if (cur_tag->child) { - cur_tag = cur_tag->child; - while (cur_tag->sibling) { - cur_tag = cur_tag->sibling; - } - cur_tag->sibling = new_tag; - new_tag->parent = cur_tag->parent; - } else { - cur_tag->child = new_tag; - new_tag->parent = cur_tag; - } - } else { - fs_gpx = (fs_xml*)fs_chain_find(*fs_ptr, FS_GPX); - - if (fs_gpx && fs_gpx->tag) { - cur_tag = fs_gpx->tag; - while (cur_tag->sibling) { - cur_tag = cur_tag->sibling; - } - cur_tag->sibling = new_tag; - new_tag->parent = NULL; - } else { - fs_gpx = fs_xml_alloc(FS_GPX); - fs_gpx->tag = new_tag; - fs_chain_add(fs_ptr, (format_specific_data*)fs_gpx); - new_tag->parent = NULL; - } - } - cur_tag = new_tag; -} - -static void -end_something_else() -{ - if (cur_tag) { - cur_tag = cur_tag->parent; - } -} - -static void -tag_log_wpt(const char** attrv) -{ - waypoint* lwp_tmp; - const char** avp = &attrv[0]; - - /* create a new waypoint */ - lwp_tmp = waypt_new(); - - /* extract the lat/lon attributes */ - while (*avp) { - if (strcmp(avp[0], "lat") == 0) { - sscanf(avp[1], "%lf", - &lwp_tmp->latitude); - } else if (strcmp(avp[0], "lon") == 0) { - sscanf(avp[1], "%lf", - &lwp_tmp->longitude); - } - avp+=2; - } - /* Make a new shortname. Since this is a groundspeak extension, - we assume that GCBLAH is the current shortname format and that - wpt_tmp refers to the currently parsed waypoint. Unfortunatley, - we need to keep track of log_wpt counts so we don't collide with - dupe shortnames. - */ - - if ((wpt_tmp->shortname) && (strlen(wpt_tmp->shortname) > 2)) { - /* copy of the shortname */ - lwp_tmp->shortname = xcalloc(7, 1); - sprintf(lwp_tmp->shortname, "%-4.4s%02d", - &wpt_tmp->shortname[2], logpoint_ct++); - - waypt_add(lwp_tmp); - } -} - -static void -gpx_start(void* data, const XML_Char* xml_el, const XML_Char** xml_attr) -{ - char* e; - char* ep; - int passthrough; - const char* el = xml_convert_to_char_string(xml_el); - const char** attr = xml_convert_attrs_to_char_string(xml_attr); - - vmem_realloc(¤t_tag, strlen(current_tag.mem) + 2 + strlen(el)); - e = current_tag.mem; - ep = e + strlen(e); - *ep++ = '/'; - strcpy(ep, el); - - - /* - * FIXME: Find out why a cdatastr[0] doesn't adequately reset the - * cdata handler. - */ - memset(cdatastr.mem, 0, cdatastr.size); - - switch (get_tag(current_tag.mem, &passthrough)) { - case tt_gpx: - tag_gpx(attr); - break; - case tt_wpt: - tag_wpt(attr); - break; - case tt_wpt_link: - if (0 == strcmp(attr[0], "href")) { - link_url = attr[1]; - } - break; - case tt_wpt_link_text: - link_text = cdatastr.mem; - break; - case tt_rte: - rte_head = route_head_alloc(); - route_add_head(rte_head); - fs_ptr = &rte_head->fs; - break; - case tt_rte_rtept: - tag_wpt(attr); - break; - case tt_trk: - trk_head = route_head_alloc(); - track_add_head(trk_head); - fs_ptr = &trk_head->fs; - break; - case tt_trk_trkseg_trkpt: - tag_wpt(attr); - break; - case tt_unknown: - start_something_else(el, attr); - return; - case tt_cache: - tag_gs_cache(attr); - break; - case tt_cache_log_wpt: - if (opt_logpoint) { - tag_log_wpt(attr); - } - break; - case tt_cache_desc_long: - case tt_cache_desc_short: - tag_cache_desc(attr); - break; - case tt_cache_placer: - if (*attr && (0 == strcmp(attr[0], "id"))) { - wpt_tmp->gc_data.placer_id = atoi(attr[1]); - } - default: - break; - } - if (passthrough) { - start_something_else(el, attr); - } - xml_free_converted_string(el); - xml_free_converted_attrs(attr); -} - -struct - gs_type_mapping { - geocache_type type; - const char* name; -} gs_type_map[] = { - { gt_traditional, "Traditional Cache" }, - { gt_traditional, "Traditional" }, /* opencaching.de */ - { gt_multi, "Multi-cache" }, - { gt_multi, "Multi" }, /* opencaching.de */ - { gt_virtual, "Virtual Cache" }, - { gt_virtual, "Virtual" }, /* opencaching.de */ - { gt_event, "Event Cache" }, - { gt_event, "Event" }, /* opencaching.de */ - { gt_webcam, "Webcam Cache" }, - { gt_webcam, "Webcam" }, /* opencaching.de */ - { gt_suprise, "Unknown Cache" }, - { gt_earth, "Earthcache" }, - { gt_earth, "Earth" }, /* opencaching.de */ - { gt_cito, "Cache In Trash Out Event" }, - { gt_letterbox, "Letterbox Hybrid" }, - { gt_locationless, "Locationless (Reverse) Cache" }, - { gt_ape, "Project APE Cache" }, - { gt_mega, "Mega-Event Cache" }, - - { gt_benchmark, "Benchmark" }, /* Not Groundspeak; for GSAK */ -}; - -struct - gs_container_mapping { - geocache_container type; - const char* name; -} gs_container_map[] = { - { gc_other, "Unknown" }, - { gc_other, "Other" }, /* Synonym on read. */ - { gc_micro, "Micro" }, - { gc_regular, "Regular" }, - { gc_large, "Large" }, - { gc_small, "Small" }, - { gc_virtual, "Virtual" } -}; - -geocache_type -gs_mktype(const char* t) -{ - int i; - int sz = sizeof(gs_type_map) / sizeof(gs_type_map[0]); - - for (i = 0; i < sz; i++) { - if (0 == case_ignore_strcmp(t, gs_type_map[i].name)) { - return gs_type_map[i].type; - } - } - return gt_unknown; -} - -const char* -gs_get_cachetype(geocache_type t) -{ - int i; - int sz = sizeof(gs_type_map) / sizeof(gs_type_map[0]); - - for (i = 0; i < sz; i++) { - if (t == gs_type_map[i].type) { - return gs_type_map[i].name; - } - } - return "Unknown"; -} - -geocache_container -gs_mkcont(const char* t) -{ - int i; - int sz = sizeof(gs_container_map) / sizeof(gs_container_map[0]); - - for (i = 0; i < sz; i++) { - if (0 == case_ignore_strcmp(t, gs_container_map[i].name)) { - return gs_container_map[i].type; - } - } - return gc_unknown; -} - -const char* -gs_get_container(geocache_container t) -{ - int i; - int sz = sizeof(gs_container_map) / sizeof(gs_container_map[0]); - - for (i = 0; i < sz; i++) { - if (t == gs_container_map[i].type) { - return gs_container_map[i].name; - } - } - return "Unknown"; -} - -time_t -xml_parse_time(const char* cdatastr, int* microsecs) -{ - int off_hr = 0; - int off_min = 0; - int off_sign = 1; - char* offsetstr = NULL; - char* pointstr = NULL; - struct tm tm; - time_t rv = 0; - char* timestr = xstrdup(cdatastr); - - memset(&tm, 0, sizeof(tm)); - - offsetstr = strchr(timestr, 'Z'); - if (offsetstr) { - /* zulu time; offsets stay at defaults */ - *offsetstr = '\0'; - } else { - offsetstr = strchr(timestr, '+'); - if (offsetstr) { - /* positive offset; parse it */ - *offsetstr = '\0'; - sscanf(offsetstr+1, "%d:%d", &off_hr, &off_min); - } else { - offsetstr = strchr(timestr, 'T'); - if (offsetstr) { - offsetstr = strchr(offsetstr, '-'); - if (offsetstr) { - /* negative offset; parse it */ - *offsetstr = '\0'; - sscanf(offsetstr+1, "%d:%d", - &off_hr, &off_min); - off_sign = -1; - } - } - } - } - - pointstr = strchr(timestr, '.'); - if (pointstr) { - if (microsecs) { - double fsec; - sscanf(pointstr, "%le", &fsec); - /* Round to avoid FP jitter */ - *microsecs = .5 + (fsec * 1000000.0) ; - } - *pointstr = '\0'; - } - - sscanf(timestr, "%d-%d-%dT%d:%d:%d", - &tm.tm_year, - &tm.tm_mon, - &tm.tm_mday, - &tm.tm_hour, - &tm.tm_min, - &tm.tm_sec); - tm.tm_mon -= 1; - tm.tm_year -= 1900; - tm.tm_isdst = 0; - - rv = mkgmtime(&tm) - off_sign*off_hr*3600 - off_sign*off_min*60; - - xfree(timestr); - - return rv; -} - -static void -gpx_end(void* data, const XML_Char* xml_el) -{ - const char* el = xml_convert_to_char_string(xml_el); - char* s = strrchr(current_tag.mem, '/'); - float x; - char* cdatastrp = cdatastr.mem; - int passthrough; - static time_t gc_log_date; - tag_type tag; - - if (strcmp(s + 1, el)) { - fprintf(stderr, "Mismatched tag %s\n", el); - } - - tag = get_tag(current_tag.mem, &passthrough); - switch (tag) { - /* - * First, the tags that are file-global. - */ - case tt_name: - gpx_add_to_global(&gpx_global->name, cdatastrp); - break; - case tt_desc: - gpx_add_to_global(&gpx_global->desc, cdatastrp); - break; - case tt_author: - gpx_add_to_global(&gpx_global->author, cdatastrp); - break; - case tt_email: - gpx_add_to_global(&gpx_global->email, cdatastrp); - if (gpx_email == NULL) { - gpx_email = xstrdup(cdatastrp); - } - break; - case tt_url: - gpx_add_to_global(&gpx_global->url, cdatastrp); - break; - case tt_urlname: - gpx_add_to_global(&gpx_global->urlname, cdatastrp); - break; - case tt_keywords: - gpx_add_to_global(&gpx_global->keywords, cdatastrp); - break; - - /* - * Waypoint-specific tags. - */ - case tt_wpt: - waypt_add(wpt_tmp); - logpoint_ct = 0; - cur_tag = NULL; - wpt_tmp = NULL; - break; - case tt_cache_name: - if (wpt_tmp->notes != NULL) { - xfree(wpt_tmp->notes); - } - wpt_tmp->notes = xstrdup(cdatastrp); - break; - case tt_cache_container: - wpt_tmp->gc_data.container = gs_mkcont(cdatastrp); - break; - case tt_cache_type: - wpt_tmp->gc_data.type = gs_mktype(cdatastrp); - break; - case tt_cache_difficulty: - sscanf(cdatastrp, "%f", &x); - wpt_tmp->gc_data.diff = x * 10; - break; - case tt_cache_hint: - rtrim(cdatastrp); - if (cdatastrp[0]) { - wpt_tmp->gc_data.hint = xstrdup(cdatastrp); - } - break; - case tt_cache_desc_long: - rtrim(cdatastrp); - if (cdatastrp[0]) { - wpt_tmp->gc_data.desc_long.is_html = cache_descr_is_html; - wpt_tmp->gc_data.desc_long.utfstring = xstrdup(cdatastrp); - } - break; - case tt_cache_desc_short: - rtrim(cdatastrp); - if (cdatastrp[0]) { - wpt_tmp->gc_data.desc_short.is_html = cache_descr_is_html; - wpt_tmp->gc_data.desc_short.utfstring = xstrdup(cdatastrp); - } - break; - case tt_cache_terrain: - sscanf(cdatastrp, "%f", &x); - wpt_tmp->gc_data.terr = x * 10; - break; - case tt_cache_placer: - wpt_tmp->gc_data.placer = xstrdup(cdatastrp); - break; - case tt_cache_log_date: - gc_log_date = xml_parse_time(cdatastrp, NULL); - break; - /* - * "Found it" logs follow the date according to the schema, - * if this is the first "found it" for this waypt, just use the - * last date we saw in this log. - */ - case tt_cache_log_type: - if ((0 == strcmp(cdatastrp, "Found it")) && - (0 == wpt_tmp->gc_data.last_found)) { - wpt_tmp->gc_data.last_found = gc_log_date; - } - gc_log_date = 0; - break; - - /* - * Garmin-waypoint-specific tags. - */ - case tt_garmin_wpt_proximity: - case tt_garmin_wpt_temperature: - case tt_garmin_wpt_depth: - case tt_garmin_wpt_display_mode: - case tt_garmin_wpt_category: - case tt_garmin_wpt_addr: - case tt_garmin_wpt_city: - case tt_garmin_wpt_state: - case tt_garmin_wpt_country: - case tt_garmin_wpt_postal_code: - case tt_garmin_wpt_phone_nr: - garmin_fs_xml_convert(tt_garmin_wpt_extensions, tag, cdatastrp, wpt_tmp); - break; - - /* - * Route-specific tags. - */ - case tt_rte_name: - rte_head->rte_name = xstrdup(cdatastrp); - break; - case tt_rte: - break; - case tt_rte_rtept: - route_add_wpt(rte_head, wpt_tmp); - wpt_tmp = NULL; - break; - case tt_rte_desc: - rte_head->rte_desc = xstrdup(cdatastrp); - break; - case tt_rte_number: - rte_head->rte_num = atoi(cdatastrp); - break; - /* - * Track-specific tags. - */ - case tt_trk_name: - trk_head->rte_name = xstrdup(cdatastrp); - break; - case tt_trk: - break; - case tt_trk_trkseg_trkpt: - track_add_wpt(trk_head, wpt_tmp); - wpt_tmp = NULL; - break; - case tt_trk_desc: - trk_head->rte_desc = xstrdup(cdatastrp); - break; - case tt_trk_number: - trk_head->rte_num = atoi(cdatastrp); - break; - case tt_trk_trkseg_trkpt_course: - WAYPT_SET(wpt_tmp, course, atof(cdatastrp)); - break; - case tt_trk_trkseg_trkpt_speed: - WAYPT_SET(wpt_tmp, speed, atof(cdatastrp)); - break; - - /* - * Items that are actually in multiple categories. - */ - case tt_wpt_ele: - case tt_rte_rtept_ele: - case tt_trk_trkseg_trkpt_ele: - sscanf(cdatastrp, "%lf", &wpt_tmp->altitude); - break; - case tt_wpt_name: - case tt_rte_rtept_name: - case tt_trk_trkseg_trkpt_name: - wpt_tmp->shortname = xstrdup(cdatastrp); - break; - case tt_wpt_sym: - case tt_rte_rtept_sym: - case tt_trk_trkseg_trkpt_sym: - wpt_tmp->icon_descr = xstrdup(cdatastrp); - wpt_tmp->wpt_flags.icon_descr_is_dynamic = 1; - break; - case tt_wpt_time: - case tt_trk_trkseg_trkpt_time: - case tt_rte_rtept_time: - wpt_tmp->creation_time = xml_parse_time(cdatastrp, &wpt_tmp->microseconds); - break; - case tt_wpt_cmt: - case tt_rte_rtept_cmt: - case tt_trk_trkseg_trkpt_cmt: - wpt_tmp->description = xstrdup(cdatastrp); - break; - case tt_wpt_desc: - case tt_trk_trkseg_trkpt_desc: - case tt_rte_rtept_desc: - if (wpt_tmp->notes != NULL) { - xfree(wpt_tmp->notes); - } - wpt_tmp->notes = xstrdup(cdatastrp); - break; - case tt_pdop: - wpt_tmp->pdop = atof(cdatastrp); - break; - case tt_hdop: - wpt_tmp->hdop = atof(cdatastrp); - break; - case tt_vdop: - wpt_tmp->vdop = atof(cdatastrp); - break; - case tt_sat: - wpt_tmp->sat = atof(cdatastrp); - break; - case tt_fix: - wpt_tmp->fix = atoi(cdatastrp)-1; - if (wpt_tmp->fix < fix_2d) { - if (!case_ignore_strcmp(cdatastrp, "none")) { - wpt_tmp->fix = fix_none; - } else if (!case_ignore_strcmp(cdatastrp, "dgps")) { - wpt_tmp->fix = fix_dgps; - } else if (!case_ignore_strcmp(cdatastrp, "pps")) { - wpt_tmp->fix = fix_pps; - } else { - wpt_tmp->fix = fix_unknown; - } - } - break; - case tt_wpt_url: - case tt_trk_trkseg_trkpt_url: - case tt_rte_rtept_url: - wpt_tmp->url = xstrdup(cdatastrp); - break; - case tt_wpt_urlname: - case tt_trk_trkseg_trkpt_urlname: - case tt_rte_rtept_urlname: - wpt_tmp->url_link_text = xstrdup(cdatastrp); - break; - case tt_wpt_link: -//TODO: implement GPX 1.1 case tt_trk_trkseg_trkpt_link: -//TODO: implement GPX 1.1 case tt_rte_rtept_link: - { - char* lt = link_text; - if (lt) { - lt = xstrdup(lrtrim(link_text)); - } - - waypt_add_url(wpt_tmp, xstrdup(link_url), lt); - link_text = NULL; - } - break; - case tt_unknown: - end_something_else(); - *s = 0; - return; - default: - break; - } - - if (passthrough) { - end_something_else(); - } - - *s = 0; - xml_free_converted_string(el); -} - -#if ! HAVE_LIBEXPAT -static void -gpx_rd_init(const char* fname) -{ - fatal(MYNAME ": This build excluded GPX support because expat was not installed.\n"); -} - -static void -gpx_rd_deinit(void) -{ -} - -#else /* NO_EXPAT */ - -static void -gpx_cdata(void* dta, const XML_Char* xml_el, int len) -{ - char* estr; - int* cdatalen; - char** cdata; - xml_tag* tmp_tag; - size_t slen = strlen(cdatastr.mem); - const char* s = xml_convert_to_char_string_n(xml_el, &len); - - vmem_realloc(&cdatastr, 1 + len + slen); - estr = ((char*) cdatastr.mem) + slen; - memcpy(estr, s, len); - estr[len] = 0; - - if (!cur_tag) { - return; - } - - if (cur_tag->child) { - tmp_tag = cur_tag->child; - while (tmp_tag->sibling) { - tmp_tag = tmp_tag->sibling; - } - cdata = &(tmp_tag->parentcdata); - cdatalen = &(tmp_tag->parentcdatalen); - } else { - cdata = &(cur_tag->cdata); - cdatalen = &(cur_tag->cdatalen); - } - estr = *cdata; - *cdata = xcalloc(*cdatalen + len + 1, 1); - if (estr) { - memcpy(*cdata, estr, *cdatalen); - xfree(estr); - } - estr = *cdata + *cdatalen; - memcpy(estr, s, len); - *(estr+len) = '\0'; - *cdatalen += len; - - xml_free_converted_string(s); -} - -static void -gpx_rd_init(const char* fname) -{ - if (fname[0]) { - fd = gbfopen(fname, "r", MYNAME); - input_fname = fname; - } else { - fd = NULL; - input_string = fname+1; - input_string_len = strlen(input_string); - input_fname = NULL; - } - - - file_time = 0; - current_tag = vmem_alloc(1, 0); - *((char*)current_tag.mem) = '\0'; - - prescan_tags(); - - psr = XML_ParserCreate(NULL); - if (!psr) { - fatal(MYNAME ": Cannot create XML Parser\n"); - } - XML_SetUnknownEncodingHandler(psr, cet_lib_expat_UnknownEncodingHandler, NULL); - - cdatastr = vmem_alloc(1, 0); - *((char*)cdatastr.mem) = '\0'; - - if (!xsi_schema_loc) { - xsi_schema_loc = xstrdup(DEFAULT_XSI_SCHEMA_LOC); - } - if (!xsi_schema_loc) { - fatal("gpx: Unable to allocate %ld bytes of memory.\n", - (unsigned long) strlen(DEFAULT_XSI_SCHEMA_LOC) + 1); - } - - if (NULL == gpx_global) { - gpx_global = xcalloc(sizeof(*gpx_global), 1); - QUEUE_INIT(&gpx_global->name.queue); - QUEUE_INIT(&gpx_global->desc.queue); - QUEUE_INIT(&gpx_global->author.queue); - QUEUE_INIT(&gpx_global->email.queue); - QUEUE_INIT(&gpx_global->url.queue); - QUEUE_INIT(&gpx_global->urlname.queue); - QUEUE_INIT(&gpx_global->keywords.queue); - } - - XML_SetElementHandler(psr, gpx_start, gpx_end); - XML_SetCharacterDataHandler(psr, gpx_cdata); - fs_ptr = NULL; -} - -static -void -gpx_rd_deinit(void) -{ - vmem_free(¤t_tag); - vmem_free(&cdatastr); - /* - * Don't free schema_loc. It really is important that we preserve - * this across reads or else merges/copies of files with different - * schemas won't retain the headers. - * - * moved to gpx_exit - - if ( xsi_schema_loc ) { - xfree(xsi_schema_loc); - xsi_schema_loc = NULL; - } - */ - - if (gpx_email) { - xfree(gpx_email); - gpx_email = NULL; - } - if (gpx_author) { - xfree(gpx_author); - gpx_author = NULL; - } - if (fd) { - gbfclose(fd); - } - XML_ParserFree(psr); - psr = NULL; - wpt_tmp = NULL; - cur_tag = NULL; - input_fname = NULL; -} -#endif - -static void -gpx_wr_init(const char* fname) -{ - mkshort_handle = mkshort_new_handle(); - - ofd = gbfopen(fname, "w", MYNAME); -} - -static void -gpx_wr_deinit(void) -{ - gbfclose(ofd); - mkshort_del_handle(&mkshort_handle); -} - -void -gpx_read(void) -{ -#if HAVE_LIBEXPAT - int len; - int done = 0; - char* buf = xmalloc(MY_CBUF_SZ); - int result = 0; - int extra; - - while (!done) { - if (fd) { - /* - * The majority of this block (in fact, all but the - * call to XML_Parse) are a disgusting hack to - * correct defective GPX files that Geocaching.com - * issues as pocket queries. They contain escape - * characters as entities (�-) which makes - * them not validate which croaks expat and torments - * users. - * - * Look for '&' in the last maxentlength chars. If - * we find it, strip it, then read byte-at-a-time - * until we find a non-entity. - */ - char* badchar; - char* semi; - int maxentlength = 8; - len = gbfread(buf, 1, MY_CBUF_SZ - maxentlength, fd); - done = gbfeof(fd) || !len; - buf[len] = '\0'; - if (len < maxentlength) { - maxentlength = len; - } - badchar = buf+len-maxentlength; - badchar = strchr(badchar, '&'); - extra = maxentlength - 1; /* for terminator */ - while (badchar && len < MY_CBUF_SZ-1) { - semi = strchr(badchar, ';'); - while (extra && !semi) { - len += gbfread(buf+len, 1, 1, fd); - buf[len]='\0'; - extra--; - if (buf[len-1] == ';') { - semi= buf+len-1; - } - } - badchar = strchr(badchar+1, '&'); - } - { - char* hex="0123456789abcdef"; - badchar = strstr(buf, "&#x"); - while (badchar) { - int val = 0; - char* hexit = badchar+3; - semi = strchr(badchar, ';'); - if (semi) { - while (*hexit && *hexit != ';') { - char hc = isalpha(*hexit) ? tolower(*hexit) : *hexit; - val *= 16; - val += strchr(hex, hc)-hex; - hexit++; - } - - if (val < 32) { - warning(MYNAME ": Ignoring illegal character %s;\n\tConsider emailing %s at <%s>\n\tabout illegal characters in their GPX files.\n", badchar, gpx_author?gpx_author:"(unknown author)", gpx_email?gpx_email:"(unknown email address)"); - memmove(badchar, semi+1, strlen(semi+1)+1); - len -= (semi-badchar)+1; - badchar--; - } - } - badchar = strstr(badchar+1, "&#x"); - } - } - result = XML_Parse(psr, buf, len, done); - } else if (input_string) { - done = 0; - result = XML_Parse(psr, input_string, - input_string_len, done); - done = 1; - } else { - done = 1; - result = -1; - } - if (!result) { - fatal(MYNAME ": XML parse error at line %d of '%s' : %s\n", - (int) XML_GetCurrentLineNumber(psr), - input_fname ? input_fname : "unknown file", - XML_ErrorString(XML_GetErrorCode(psr))); - } - } - xfree(buf); -#endif /* HAVE_LIBEXPAT */ -} - -static void -fprint_tag_and_attrs(char* prefix, char* suffix, xml_tag* tag) -{ - char** pa; - gbfprintf(ofd, "%s%s", prefix, tag->tagname); - pa = tag->attributes; - if (pa) { - while (*pa) { - gbfprintf(ofd, " %s=\"%s\"", pa[0], pa[1]); - pa += 2; - } - } - gbfprintf(ofd, "%s", suffix); -} - -static void -fprint_xml_chain(xml_tag* tag, const waypoint* wpt) -{ - char* tmp_ent; - while (tag) { - if (!tag->cdata && !tag->child) { - fprint_tag_and_attrs("<", " />", tag); - } else { - fprint_tag_and_attrs("<", ">", tag); - - if (tag->cdata) { - tmp_ent = xml_entitize(tag->cdata); - gbfprintf(ofd, "%s", tmp_ent); - xfree(tmp_ent); - } - if (tag->child) { - fprint_xml_chain(tag->child, wpt); - } - if (wpt && wpt->gc_data.exported && - strcmp(tag->tagname, "groundspeak:cache") == 0) { - xml_write_time(ofd, wpt->gc_data.exported, 0, - "groundspeak:exported"); - } - gbfprintf(ofd, "\n", tag->tagname); - } - if (tag->parentcdata) { - tmp_ent = xml_entitize(tag->parentcdata); - gbfprintf(ofd, "%s", tmp_ent); - xfree(tmp_ent); - } - tag = tag->sibling; - } -} - -void free_gpx_extras(xml_tag* tag) -{ - xml_tag* next = NULL; - char** ap; - - while (tag) { - if (tag->cdata) { - xfree(tag->cdata); - } - if (tag->child) { - free_gpx_extras(tag->child); - } - if (tag->parentcdata) { - xfree(tag->parentcdata); - } - if (tag->tagname) { - xfree(tag->tagname); - } - if (tag->attributes) { - ap = tag->attributes; - - while (*ap) { - xfree(*ap++); - } - - xfree(tag->attributes); - } - - next = tag->sibling; - xfree(tag); - tag = next; - } -} - -/* - * Handle the grossness of GPX 1.0 vs. 1.1 handling of linky links. - */ -static void -write_gpx_url(const waypoint* waypointp) -{ - char* tmp_ent; - - if (waypointp->url == NULL) { - return; - } - - if (gpx_wversion_num > 10) { - url_link* tail; - for (tail = (url_link*)&waypointp->url_next; tail; tail = tail->url_next) { - tmp_ent = xml_entitize(tail->url); - gbfprintf(ofd, " \n", - urlbase ? urlbase : "", tmp_ent); - write_optional_xml_entity(ofd, " ", "text", - tail->url_link_text); - gbfprintf(ofd, " \n"); - xfree(tmp_ent); - } - } else { - tmp_ent = xml_entitize(waypointp->url); - gbfprintf(ofd, " %s%s\n", - urlbase ? urlbase : "", tmp_ent); - write_optional_xml_entity(ofd, " ", "urlname", - waypointp->url_link_text); - xfree(tmp_ent); - } -} - -/* - * Write optional accuracy information for a given (way|track|route)point - * to the output stream. Done in one place since it's common for all three. - * Order counts. - */ -static void -gpx_write_common_acc(const waypoint* waypointp, const char* indent) -{ - char* fix = NULL; - - switch (waypointp->fix) { - case fix_2d: - fix = "2d"; - break; - case fix_3d: - fix = "3d"; - break; - case fix_dgps: - fix = "dgps"; - break; - case fix_pps: - fix = "pps"; - break; - case fix_none: - fix = "none"; - break; - /* GPX spec says omit if we don't know. */ - case fix_unknown: - default: - break; - } - if (fix) { - gbfprintf(ofd, "%s%s\n", indent, fix); - } - if (waypointp->sat > 0) { - gbfprintf(ofd, "%s%d\n", indent, waypointp->sat); - } - if (waypointp->hdop) { - gbfprintf(ofd, "%s%f\n", indent, waypointp->hdop); - } - if (waypointp->vdop) { - gbfprintf(ofd, "%s%f\n", indent, waypointp->vdop); - } - if (waypointp->pdop) { - gbfprintf(ofd, "%s%f\n", indent, waypointp->pdop); - } -} - -static void -gpx_write_common_position(const waypoint* waypointp, const char* indent) -{ - if (waypointp->altitude != unknown_alt) { - gbfprintf(ofd, "%s%f\n", - indent, waypointp->altitude); - } - if (waypointp->creation_time) { - xml_write_time(ofd, waypointp->GetCreationTime(), waypointp->microseconds, "time"); - } -} - -static void -gpx_write_common_description(const waypoint* waypointp, const char* indent, - const char* oname) -{ - write_optional_xml_entity(ofd, indent, "name", oname); - write_optional_xml_entity(ofd, indent, "cmt", waypointp->description); - if (waypointp->notes && waypointp->notes[0]) { - write_xml_entity(ofd, indent, "desc", waypointp->notes); - } else { - write_optional_xml_entity(ofd, indent, "desc", waypointp->description); - } - write_gpx_url(waypointp); - write_optional_xml_entity(ofd, indent , "sym", waypointp->icon_descr); -} - -static void -gpx_waypt_pr(const waypoint* waypointp) -{ - const char* oname; - char* odesc; - fs_xml* fs_gpx; - garmin_fs_t* gmsd; /* gARmIN sPECIAL dATA */ - - /* - * Desparation time, try very hard to get a good shortname - */ - odesc = waypointp->notes; - if (!odesc) { - odesc = waypointp->description; - } - if (!odesc) { - odesc = waypointp->shortname; - } - - oname = global_opts.synthesize_shortnames ? - mkshort(mkshort_handle, odesc) : - waypointp->shortname; - - gbfprintf(ofd, "\n", - waypointp->latitude, - waypointp->longitude); - - gpx_write_common_position(waypointp, " "); - gpx_write_common_description(waypointp, " ", oname); - gpx_write_common_acc(waypointp, " "); - - fs_gpx = (fs_xml*)fs_chain_find(waypointp->fs, FS_GPX); - gmsd = GMSD_FIND(waypointp); - if (fs_gpx) { - if (! gmsd) { - fprint_xml_chain(fs_gpx->tag, waypointp); - } - } - if (gmsd && (gpx_wversion_num > 10)) { - /* MapSource doesn't accepts extensions from 1.0 */ - garmin_fs_xml_fprint(ofd, waypointp); - } - gbfprintf(ofd, "\n"); -} - -static void -gpx_track_hdr(const route_head* rte) -{ - fs_xml* fs_gpx; - - gbfprintf(ofd, "\n"); - write_optional_xml_entity(ofd, " ", "name", rte->rte_name); - write_optional_xml_entity(ofd, " ", "desc", rte->rte_desc); - if (rte->rte_num) { - gbfprintf(ofd, "%d\n", rte->rte_num); - } - gbfprintf(ofd, "\n"); - - fs_gpx = (fs_xml*)fs_chain_find(rte->fs, FS_GPX); - if (fs_gpx) { - fprint_xml_chain(fs_gpx->tag, NULL); - } -} - -static void -gpx_track_disp(const waypoint* waypointp) -{ - fs_xml* fs_gpx; - - gbfprintf(ofd, "\n", - waypointp->latitude, - waypointp->longitude); - - gpx_write_common_position(waypointp, " "); - - /* These were accidentally removed from 1.1 */ - if (gpx_wversion_num == 10) { - if WAYPT_HAS(waypointp, course) { - gbfprintf(ofd, " %f\n", - waypointp->course); - } - if WAYPT_HAS(waypointp, speed) { - gbfprintf(ofd, " %f\n", - waypointp->speed); - } - } - - /* GPX doesn't require a name on output, so if we made one up - * on input, we might as well say nothing. - */ - gpx_write_common_description(waypointp, " ", - waypointp->wpt_flags.shortname_is_synthetic ? - NULL : waypointp->shortname); - gpx_write_common_acc(waypointp, " "); - - fs_gpx = (fs_xml*)fs_chain_find(waypointp->fs, FS_GPX); - if (fs_gpx) { - fprint_xml_chain(fs_gpx->tag, waypointp); - } - - gbfprintf(ofd, "\n"); -} - -static void -gpx_track_tlr(const route_head* rte) -{ - gbfprintf(ofd, "\n"); - gbfprintf(ofd, "\n"); -} - -static -void gpx_track_pr() -{ - track_disp_all(gpx_track_hdr, gpx_track_tlr, gpx_track_disp); -} - -static void -gpx_route_hdr(const route_head* rte) -{ - fs_xml* fs_gpx; - - gbfprintf(ofd, "\n"); - write_optional_xml_entity(ofd, " ", "name", rte->rte_name); - write_optional_xml_entity(ofd, " ", "desc", rte->rte_desc); - if (rte->rte_num) { - gbfprintf(ofd, " %d\n", rte->rte_num); - } - - fs_gpx = (fs_xml*)fs_chain_find(rte->fs, FS_GPX); - if (fs_gpx) { - fprint_xml_chain(fs_gpx->tag, NULL); - } -} - -static void -gpx_route_disp(const waypoint* waypointp) -{ - fs_xml* fs_gpx; - - gbfprintf(ofd, " \n", - waypointp->latitude, - waypointp->longitude); - - gpx_write_common_position(waypointp, " "); - gpx_write_common_description(waypointp, " ", waypointp->shortname); - gpx_write_common_acc(waypointp, " "); - - fs_gpx = (fs_xml*)fs_chain_find(waypointp->fs, FS_GPX); - if (fs_gpx) { - fprint_xml_chain(fs_gpx->tag, waypointp); - } - - gbfprintf(ofd, " \n"); -} - -static void -gpx_route_tlr(const route_head* rte) -{ - gbfprintf(ofd, "\n"); -} - -static -void gpx_route_pr() -{ - /* output routes */ - route_disp_all(gpx_route_hdr, gpx_route_tlr, gpx_route_disp); -} - -static void -gpx_waypt_bound_calc(const waypoint* waypointp) -{ - waypt_add_to_bounds(&all_bounds, waypointp); -} - -static void -gpx_write_bounds(void) -{ - waypt_init_bounds(&all_bounds); - - waypt_disp_all(gpx_waypt_bound_calc); - route_disp_all(NULL, NULL, gpx_waypt_bound_calc); - track_disp_all(NULL, NULL, gpx_waypt_bound_calc); - - if (waypt_bounds_valid(&all_bounds)) { - gbfprintf(ofd, "\n", - all_bounds.min_lat, all_bounds.min_lon, - all_bounds.max_lat, all_bounds.max_lon); - } -} - -static void -gpx_write(void) -{ - time_t now = 0; - int short_length; - - gpx_wversion_num = strtod(gpx_wversion, NULL) * 10; - - if (gpx_wversion_num <= 0) { - fatal(MYNAME ": gpx version number of '%s' not valid.\n", gpx_wversion); - } - - now = current_time(); - - short_length = atoi(snlen); - - if (suppresswhite) { - setshort_whitespace_ok(mkshort_handle, 0); - } - - setshort_length(mkshort_handle, short_length); - - gbfprintf(ofd, "\n", global_opts.charset_name); - gbfprintf(ofd, "\n", xsi_schema_loc); - } else { - gbfprintf(ofd, - "xsi:schemaLocation=" DEFAULT_XSI_SCHEMA_LOC_FMT">\n", - gpx_wversion[0], gpx_wversion[2], - gpx_wversion[0], gpx_wversion[2]); - } - - if (gpx_wversion_num > 10) { - gbfprintf(ofd, "\n"); - } - gpx_write_gdata(&gpx_global->name, "name"); - gpx_write_gdata(&gpx_global->desc, "desc"); - /* In GPX 1.1, author changed from a string to a PersonType. - * since it's optional, we just drop it instead of rewriting it. - */ - if (gpx_wversion_num < 11) { - gpx_write_gdata(&gpx_global->author, "author"); - } - gpx_write_gdata(&gpx_global->email, "email"); - gpx_write_gdata(&gpx_global->url, "url"); - gpx_write_gdata(&gpx_global->urlname, "urlname"); - xml_write_time(ofd, now, 0, "time"); - gpx_write_gdata(&gpx_global->keywords, "keywords"); - - gpx_write_bounds(); - - if (gpx_wversion_num > 10) { - gbfprintf(ofd, "\n"); - } - - waypt_disp_all(gpx_waypt_pr); - gpx_route_pr(); - gpx_track_pr(); - - gbfprintf(ofd, "\n"); -} - - -static void -gpx_free_gpx_global(void) -{ - gpx_rm_from_global(&gpx_global->name); - gpx_rm_from_global(&gpx_global->desc); - gpx_rm_from_global(&gpx_global->author); - gpx_rm_from_global(&gpx_global->email); - gpx_rm_from_global(&gpx_global->url); - gpx_rm_from_global(&gpx_global->urlname); - gpx_rm_from_global(&gpx_global->keywords); - xfree(gpx_global); -} - -static void -gpx_exit(void) -{ - if (xsi_schema_loc) { - xfree(xsi_schema_loc); - xsi_schema_loc = NULL; - } - - if (gpx_global) { - gpx_free_gpx_global(); - gpx_global = NULL; - } -} - -static -arglist_t gpx_args[] = { - { - "snlen", &snlen, "Length of generated shortnames", - "32", ARGTYPE_INT, "1", NULL - }, - { - "suppresswhite", &suppresswhite, - "No whitespace in generated shortnames", - NULL, ARGTYPE_BOOL, ARG_NOMINMAX - }, - { - "logpoint", &opt_logpoint, - "Create waypoints from geocache log entries", - NULL, ARGTYPE_BOOL, ARG_NOMINMAX - }, - { - "urlbase", &urlbase, "Base URL for link tag in output", - NULL, ARGTYPE_STRING, ARG_NOMINMAX - }, - { - "gpxver", &gpx_wversion, "Target GPX version for output", - "1.0", ARGTYPE_STRING, ARG_NOMINMAX - }, - ARG_TERMINATOR -}; - -ff_vecs_t gpx_vecs = { - ff_type_file, - FF_CAP_RW_ALL, - gpx_rd_init, - gpx_wr_init, - gpx_rd_deinit, - gpx_wr_deinit, - gpx_read, - gpx_write, - gpx_exit, - gpx_args, - CET_CHARSET_UTF8, 0 /* non-fixed to create non UTF-8 XML's for testing | CET-REVIEW */ -}; -#endif diff --git a/gpsbabel/main.cc b/gpsbabel/main.cc index 8d922ce46..ddc50b208 100644 --- a/gpsbabel/main.cc +++ b/gpsbabel/main.cc @@ -212,12 +212,6 @@ print_extended_info(void) #if SHAPELIB_ENABLED "SHAPELIB_ENABLED " #endif -#if HAVE_LIBEXPAT - "HAVE_LIBEXPAT " -#if defined(XML_UNICODE) - "XML_UNICODE " -#endif -#endif #if defined CET_WANTED "CET_ENABLED " diff --git a/gpsbabel/mingw/Makefile b/gpsbabel/mingw/Makefile index 32837c31c..899c9316f 100644 --- a/gpsbabel/mingw/Makefile +++ b/gpsbabel/mingw/Makefile @@ -1,7 +1,7 @@ CC=/usr/local/cross-tools/bin/i386-mingw32msvc-gcc VPATH=..:../shapelib -FILES=gpsbabel.exe libexpat.dll ../win32/GPSBabelGUI.exe ../win32/gui-2/README.gui \ +FILES=gpsbabel.exe ../win32/GPSBabelGUI.exe ../win32/gui-2/README.gui \ ../README* ../style/README.style ../COPYING ../readme.html gpsbabel.exe: wintesto.cmd @@ -16,7 +16,7 @@ INHIBIT_USB=#-DNO_USB OSJEEPS=jeeps/gpsusbwin.o gpsbabel.exe: $(OBJS) - $(CC) -static $(CFLAGS) $(OBJS) lib/libexpat.a -o gpsbabel.exe -lsetupapi + $(CC) -static $(CFLAGS) $(OBJS) -o gpsbabel.exe -lsetupapi zip -j /tmp/gpsbabel-$(VERSIOND).zip $(FILES) cp gpsbabel.exe /tmp @@ -34,7 +34,7 @@ usbfree: $(MAKE) INHIBIT_USB=-DNO_USB gpsbabel-usbfree.exe gpsbabel-usbfree.exe: $(OBJS) - $(CC) -static $(CFLAGS) $(OBJS) lib/libexpat.a -o gpsbabel-usbfree.exe + $(CC) -static $(CFLAGS) $(OBJS) -o gpsbabel-usbfree.exe zip -j /tmp/gpsbabel-nousb-$(VERSIOND).zip gpsbabel-usbfree.exe diff --git a/gpsbabel/mingw/README.expat b/gpsbabel/mingw/README.expat deleted file mode 100644 index 9232175bd..000000000 --- a/gpsbabel/mingw/README.expat +++ /dev/null @@ -1 +0,0 @@ -Please see lib/README. diff --git a/gpsbabel/mingw/include/expat.h b/gpsbabel/mingw/include/expat.h deleted file mode 100644 index 99678856d..000000000 --- a/gpsbabel/mingw/include/expat.h +++ /dev/null @@ -1,1001 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - See the file COPYING for copying permission. -*/ - -#ifndef XmlParse_INCLUDED -#define XmlParse_INCLUDED 1 - -#ifdef __VMS -/* 0 1 2 3 0 1 2 3 - 1234567890123456789012345678901 1234567890123456789012345678901 */ -#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler -#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler -#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler -#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg -#endif - -#include - -#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) -#define XML_USE_MSC_EXTENSIONS 1 -#endif - -/* Expat tries very hard to make the API boundary very specifically - defined. There are two macros defined to control this boundary; - each of these can be defined before including this header to - achieve some different behavior, but doing so it not recommended or - tested frequently. - - XMLCALL - The calling convention to use for all calls across the - "library boundary." This will default to cdecl, and - try really hard to tell the compiler that's what we - want. - - XMLIMPORT - Whatever magic is needed to note that a function is - to be imported from a dynamically loaded library - (.dll, .so, or .sl, depending on your platform). - - The XMLCALL macro was added in Expat 1.95.7. The only one which is - expected to be directly useful in client code is XMLCALL. - - Note that on at least some Unix versions, the Expat library must be - compiled with the cdecl calling convention as the default since - system headers may assume the cdecl convention. -*/ -#ifndef XMLCALL -#if defined(XML_USE_MSC_EXTENSIONS) -#define XMLCALL __cdecl -#elif defined(__GNUC__) -#define XMLCALL __attribute__((cdecl)) -#else -/* For any platform which uses this definition and supports more than - one calling convention, we need to extend this definition to - declare the convention used on that platform, if it's possible to - do so. - - If this is the case for your platform, please file a bug report - with information on how to identify your platform via the C - pre-processor and how to specify the same calling convention as the - platform's malloc() implementation. -*/ -#define XMLCALL -#endif -#endif /* not defined XMLCALL */ - - -#if !defined(XML_STATIC) && !defined(XMLIMPORT) -#ifndef XML_BUILDING_EXPAT -/* using Expat from an application */ - -#ifdef XML_USE_MSC_EXTENSIONS -#define XMLIMPORT __declspec(dllimport) -#endif - -#endif -#endif /* not defined XML_STATIC */ - -/* If we didn't define it above, define it away: */ -#ifndef XMLIMPORT -#define XMLIMPORT -#endif - - -#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef XML_UNICODE_WCHAR_T -#define XML_UNICODE -#endif - -struct XML_ParserStruct; -typedef struct XML_ParserStruct *XML_Parser; - -#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ -#ifdef XML_UNICODE_WCHAR_T -typedef wchar_t XML_Char; -typedef wchar_t XML_LChar; -#else -typedef unsigned short XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE_WCHAR_T */ -#else /* Information is UTF-8 encoded. */ -typedef char XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE */ - -/* Should this be defined using stdbool.h when C99 is available? */ -typedef unsigned char XML_Bool; -#define XML_TRUE ((XML_Bool) 1) -#define XML_FALSE ((XML_Bool) 0) - -/* The XML_Status enum gives the possible return values for several - API functions. The preprocessor #defines are included so this - stanza can be added to code that still needs to support older - versions of Expat 1.95.x: - - #ifndef XML_STATUS_OK - #define XML_STATUS_OK 1 - #define XML_STATUS_ERROR 0 - #endif - - Otherwise, the #define hackery is quite ugly and would have been - dropped. -*/ -enum XML_Status { - XML_STATUS_ERROR = 0, -#define XML_STATUS_ERROR XML_STATUS_ERROR - XML_STATUS_OK = 1 -#define XML_STATUS_OK XML_STATUS_OK -}; - -enum XML_Error { - XML_ERROR_NONE, - XML_ERROR_NO_MEMORY, - XML_ERROR_SYNTAX, - XML_ERROR_NO_ELEMENTS, - XML_ERROR_INVALID_TOKEN, - XML_ERROR_UNCLOSED_TOKEN, - XML_ERROR_PARTIAL_CHAR, - XML_ERROR_TAG_MISMATCH, - XML_ERROR_DUPLICATE_ATTRIBUTE, - XML_ERROR_JUNK_AFTER_DOC_ELEMENT, - XML_ERROR_PARAM_ENTITY_REF, - XML_ERROR_UNDEFINED_ENTITY, - XML_ERROR_RECURSIVE_ENTITY_REF, - XML_ERROR_ASYNC_ENTITY, - XML_ERROR_BAD_CHAR_REF, - XML_ERROR_BINARY_ENTITY_REF, - XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, - XML_ERROR_MISPLACED_XML_PI, - XML_ERROR_UNKNOWN_ENCODING, - XML_ERROR_INCORRECT_ENCODING, - XML_ERROR_UNCLOSED_CDATA_SECTION, - XML_ERROR_EXTERNAL_ENTITY_HANDLING, - XML_ERROR_NOT_STANDALONE, - XML_ERROR_UNEXPECTED_STATE, - XML_ERROR_ENTITY_DECLARED_IN_PE, - XML_ERROR_FEATURE_REQUIRES_XML_DTD, - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, - XML_ERROR_UNBOUND_PREFIX -}; - -enum XML_Content_Type { - XML_CTYPE_EMPTY = 1, - XML_CTYPE_ANY, - XML_CTYPE_MIXED, - XML_CTYPE_NAME, - XML_CTYPE_CHOICE, - XML_CTYPE_SEQ -}; - -enum XML_Content_Quant { - XML_CQUANT_NONE, - XML_CQUANT_OPT, - XML_CQUANT_REP, - XML_CQUANT_PLUS -}; - -/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be - XML_CQUANT_NONE, and the other fields will be zero or NULL. - If type == XML_CTYPE_MIXED, then quant will be NONE or REP and - numchildren will contain number of elements that may be mixed in - and children point to an array of XML_Content cells that will be - all of XML_CTYPE_NAME type with no quantification. - - If type == XML_CTYPE_NAME, then the name points to the name, and - the numchildren field will be zero and children will be NULL. The - quant fields indicates any quantifiers placed on the name. - - CHOICE and SEQ will have name NULL, the number of children in - numchildren and children will point, recursively, to an array - of XML_Content cells. - - The EMPTY, ANY, and MIXED types will only occur at top level. -*/ - -typedef struct XML_cp XML_Content; - -struct XML_cp { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - XML_Char * name; - unsigned int numchildren; - XML_Content * children; -}; - - -/* This is called for an element declaration. See above for - description of the model argument. It's the caller's responsibility - to free model when finished with it. -*/ -typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, - const XML_Char *name, - XML_Content *model); - -XMLPARSEAPI(void) -XML_SetElementDeclHandler(XML_Parser parser, - XML_ElementDeclHandler eldecl); - -/* The Attlist declaration handler is called for *each* attribute. So - a single Attlist declaration with multiple attributes declared will - generate multiple calls to this handler. The "default" parameter - may be NULL in the case of the "#IMPLIED" or "#REQUIRED" - keyword. The "isrequired" parameter will be true and the default - value will be NULL in the case of "#REQUIRED". If "isrequired" is - true and default is non-NULL, then this is a "#FIXED" default. -*/ -typedef void (XMLCALL *XML_AttlistDeclHandler) ( - void *userData, - const XML_Char *elname, - const XML_Char *attname, - const XML_Char *att_type, - const XML_Char *dflt, - int isrequired); - -XMLPARSEAPI(void) -XML_SetAttlistDeclHandler(XML_Parser parser, - XML_AttlistDeclHandler attdecl); - -/* The XML declaration handler is called for *both* XML declarations - and text declarations. The way to distinguish is that the version - parameter will be NULL for text declarations. The encoding - parameter may be NULL for XML declarations. The standalone - parameter will be -1, 0, or 1 indicating respectively that there - was no standalone parameter in the declaration, that it was given - as no, or that it was given as yes. -*/ -typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, - const XML_Char *version, - const XML_Char *encoding, - int standalone); - -XMLPARSEAPI(void) -XML_SetXmlDeclHandler(XML_Parser parser, - XML_XmlDeclHandler xmldecl); - - -typedef struct { - void *(XMLCALL *malloc_fcn)(size_t size); - void *(XMLCALL *realloc_fcn)(void *ptr, size_t size); - void (XMLCALL *free_fcn)(void *ptr); -} XML_Memory_Handling_Suite; - -/* Constructs a new parser; encoding is the encoding specified by the - external protocol or NULL if there is none specified. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate(const XML_Char *encoding); - -/* Constructs a new parser and namespace processor. Element type - names and attribute names that belong to a namespace will be - expanded; unprefixed attribute names are never expanded; unprefixed - element type names are expanded only if there is a default - namespace. The expanded name is the concatenation of the namespace - URI, the namespace separator character, and the local part of the - name. If the namespace separator is '\0' then the namespace URI - and the local part will be concatenated without any separator. - When a namespace is not declared, the name and prefix will be - passed through without expansion. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); - - -/* Constructs a new parser using the memory management suite referred to - by memsuite. If memsuite is NULL, then use the standard library memory - suite. If namespaceSeparator is non-NULL it creates a parser with - namespace processing as described above. The character pointed at - will serve as the namespace separator. - - All further memory operations used for the created parser will come from - the given suite. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate_MM(const XML_Char *encoding, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *namespaceSeparator); - -/* Prepare a parser object to be re-used. This is particularly - valuable when memory allocation overhead is disproportionatly high, - such as when a large number of small documnents need to be parsed. - All handlers are cleared from the parser, except for the - unknownEncodingHandler. The parser's external state is re-initialized - except for the values of ns and ns_triplets. - - Added in Expat 1.95.3. -*/ -XMLPARSEAPI(XML_Bool) -XML_ParserReset(XML_Parser parser, const XML_Char *encoding); - -/* atts is array of name/value pairs, terminated by 0; - names and values are 0 terminated. -*/ -typedef void (XMLCALL *XML_StartElementHandler) (void *userData, - const XML_Char *name, - const XML_Char **atts); - -typedef void (XMLCALL *XML_EndElementHandler) (void *userData, - const XML_Char *name); - - -/* s is not 0 terminated. */ -typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, - const XML_Char *s, - int len); - -/* target and data are 0 terminated */ -typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( - void *userData, - const XML_Char *target, - const XML_Char *data); - -/* data is 0 terminated */ -typedef void (XMLCALL *XML_CommentHandler) (void *userData, - const XML_Char *data); - -typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); -typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); - -/* This is called for any characters in the XML document for which - there is no applicable handler. This includes both characters that - are part of markup which is of a kind that is not reported - (comments, markup declarations), or characters that are part of a - construct which could be reported but for which no handler has been - supplied. The characters are passed exactly as they were in the XML - document except that they will be encoded in UTF-8 or UTF-16. - Line boundaries are not normalized. Note that a byte order mark - character is not passed to the default handler. There are no - guarantees about how characters are divided between calls to the - default handler: for example, a comment might be split between - multiple calls. -*/ -typedef void (XMLCALL *XML_DefaultHandler) (void *userData, - const XML_Char *s, - int len); - -/* This is called for the start of the DOCTYPE declaration, before - any DTD or internal subset is parsed. -*/ -typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( - void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset); - -/* This is called for the start of the DOCTYPE declaration when the - closing > is encountered, but after processing any external - subset. -*/ -typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); - -/* This is called for entity declarations. The is_parameter_entity - argument will be non-zero if the entity is a parameter entity, zero - otherwise. - - For internal entities (), value will - be non-NULL and systemId, publicID, and notationName will be NULL. - The value string is NOT nul-terminated; the length is provided in - the value_length argument. Since it is legal to have zero-length - values, do not use this argument to test for internal entities. - - For external entities, value will be NULL and systemId will be - non-NULL. The publicId argument will be NULL unless a public - identifier was provided. The notationName argument will have a - non-NULL value only for unparsed entity declarations. - - Note that is_parameter_entity can't be changed to XML_Bool, since - that would break binary compatibility. -*/ -typedef void (XMLCALL *XML_EntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity, - const XML_Char *value, - int value_length, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -XMLPARSEAPI(void) -XML_SetEntityDeclHandler(XML_Parser parser, - XML_EntityDeclHandler handler); - -/* OBSOLETE -- OBSOLETE -- OBSOLETE - This handler has been superceded by the EntityDeclHandler above. - It is provided here for backward compatibility. - - This is called for a declaration of an unparsed (NDATA) entity. - The base argument is whatever was set by XML_SetBase. The - entityName, systemId and notationName arguments will never be - NULL. The other arguments may be. -*/ -typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -/* This is called for a declaration of notation. The base argument is - whatever was set by XML_SetBase. The notationName will never be - NULL. The other arguments can be. -*/ -typedef void (XMLCALL *XML_NotationDeclHandler) ( - void *userData, - const XML_Char *notationName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* When namespace processing is enabled, these are called once for - each namespace declaration. The call to the start and end element - handlers occur between the calls to the start and end namespace - declaration handlers. For an xmlns attribute, prefix will be - NULL. For an xmlns="" attribute, uri will be NULL. -*/ -typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix, - const XML_Char *uri); - -typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix); - -/* This is called if the document is not standalone, that is, it has an - external subset or a reference to a parameter entity, but does not - have standalone="yes". If this handler returns XML_STATUS_ERROR, - then processing will not continue, and the parser will return a - XML_ERROR_NOT_STANDALONE error. - If parameter entity parsing is enabled, then in addition to the - conditions above this handler will only be called if the referenced - entity was actually read. -*/ -typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); - -/* This is called for a reference to an external parsed general - entity. The referenced entity is not automatically parsed. The - application can parse it immediately or later using - XML_ExternalEntityParserCreate. - - The parser argument is the parser parsing the entity containing the - reference; it can be passed as the parser argument to - XML_ExternalEntityParserCreate. The systemId argument is the - system identifier as specified in the entity declaration; it will - not be NULL. - - The base argument is the system identifier that should be used as - the base for resolving systemId if systemId was relative; this is - set by XML_SetBase; it may be NULL. - - The publicId argument is the public identifier as specified in the - entity declaration, or NULL if none was specified; the whitespace - in the public identifier will have been normalized as required by - the XML spec. - - The context argument specifies the parsing context in the format - expected by the context argument to XML_ExternalEntityParserCreate; - context is valid only until the handler returns, so if the - referenced entity is to be parsed later, it must be copied. - context is NULL only when the entity is a parameter entity. - - The handler should return XML_STATUS_ERROR if processing should not - continue because of a fatal error in the handling of the external - entity. In this case the calling parser will return an - XML_ERROR_EXTERNAL_ENTITY_HANDLING error. - - Note that unlike other handlers the first argument is the parser, - not userData. -*/ -typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( - XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* This is called in two situations: - 1) An entity reference is encountered for which no declaration - has been read *and* this is not an error. - 2) An internal entity reference is read, but not expanded, because - XML_SetDefaultHandler has been called. - Note: skipped parameter entities in declarations and skipped general - entities in attribute values cannot be reported, because - the event would be out of sync with the reporting of the - declarations or attribute values -*/ -typedef void (XMLCALL *XML_SkippedEntityHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity); - -/* This structure is filled in by the XML_UnknownEncodingHandler to - provide information to the parser about encodings that are unknown - to the parser. - - The map[b] member gives information about byte sequences whose - first byte is b. - - If map[b] is c where c is >= 0, then b by itself encodes the - Unicode scalar value c. - - If map[b] is -1, then the byte sequence is malformed. - - If map[b] is -n, where n >= 2, then b is the first byte of an - n-byte sequence that encodes a single Unicode scalar value. - - The data member will be passed as the first argument to the convert - function. - - The convert function is used to convert multibyte sequences; s will - point to a n-byte sequence where map[(unsigned char)*s] == -n. The - convert function must return the Unicode scalar value represented - by this byte sequence or -1 if the byte sequence is malformed. - - The convert function may be NULL if the encoding is a single-byte - encoding, that is if map[b] >= -1 for all bytes b. - - When the parser is finished with the encoding, then if release is - not NULL, it will call release passing it the data member; once - release has been called, the convert function will not be called - again. - - Expat places certain restrictions on the encodings that are supported - using this mechanism. - - 1. Every ASCII character that can appear in a well-formed XML document, - other than the characters - - $@\^`{}~ - - must be represented by a single byte, and that byte must be the - same byte that represents that character in ASCII. - - 2. No character may require more than 4 bytes to encode. - - 3. All characters encoded must have Unicode scalar values <= - 0xFFFF, (i.e., characters that would be encoded by surrogates in - UTF-16 are not allowed). Note that this restriction doesn't - apply to the built-in support for UTF-8 and UTF-16. - - 4. No Unicode character may be encoded by more than one distinct - sequence of bytes. -*/ -typedef struct { - int map[256]; - void *data; - int (XMLCALL *convert)(void *data, const char *s); - void (XMLCALL *release)(void *data); -} XML_Encoding; - -/* This is called for an encoding that is unknown to the parser. - - The encodingHandlerData argument is that which was passed as the - second argument to XML_SetUnknownEncodingHandler. - - The name argument gives the name of the encoding as specified in - the encoding declaration. - - If the callback can provide information about the encoding, it must - fill in the XML_Encoding structure, and return XML_STATUS_OK. - Otherwise it must return XML_STATUS_ERROR. - - If info does not describe a suitable encoding, then the parser will - return an XML_UNKNOWN_ENCODING error. -*/ -typedef int (XMLCALL *XML_UnknownEncodingHandler) ( - void *encodingHandlerData, - const XML_Char *name, - XML_Encoding *info); - -XMLPARSEAPI(void) -XML_SetElementHandler(XML_Parser parser, - XML_StartElementHandler start, - XML_EndElementHandler end); - -XMLPARSEAPI(void) -XML_SetStartElementHandler(XML_Parser, XML_StartElementHandler); - -XMLPARSEAPI(void) -XML_SetEndElementHandler(XML_Parser, XML_EndElementHandler); - -XMLPARSEAPI(void) -XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler); - -XMLPARSEAPI(void) -XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler); -XMLPARSEAPI(void) -XML_SetCommentHandler(XML_Parser parser, - XML_CommentHandler handler); - -XMLPARSEAPI(void) -XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end); - -XMLPARSEAPI(void) -XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start); - -XMLPARSEAPI(void) -XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end); - -/* This sets the default handler and also inhibits expansion of - internal entities. These entity references will be passed to the - default handler, or to the skipped entity handler, if one is set. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandler(XML_Parser parser, - XML_DefaultHandler handler); - -/* This sets the default handler but does not inhibit expansion of - internal entities. The entity reference will not be passed to the - default handler. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandlerExpand(XML_Parser parser, - XML_DefaultHandler handler); - -XMLPARSEAPI(void) -XML_SetDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndDoctypeDeclHandler(XML_Parser parser, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNotationDeclHandler(XML_Parser parser, - XML_NotationDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler); - -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler); - -/* If a non-NULL value for arg is specified here, then it will be - passed as the first argument to the external entity ref handler - instead of the parser object. -*/ -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg); - -XMLPARSEAPI(void) -XML_SetSkippedEntityHandler(XML_Parser parser, - XML_SkippedEntityHandler handler); - -XMLPARSEAPI(void) -XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, - void *encodingHandlerData); - -/* This can be called within a handler for a start element, end - element, processing instruction or character data. It causes the - corresponding markup to be passed to the default handler. -*/ -XMLPARSEAPI(void) -XML_DefaultCurrent(XML_Parser parser); - -/* If do_nst is non-zero, and namespace processing is in effect, and - a name has a prefix (i.e. an explicit namespace qualifier) then - that name is returned as a triplet in a single string separated by - the separator character specified when the parser was created: URI - + sep + local_name + sep + prefix. - - If do_nst is zero, then namespace information is returned in the - default manner (URI + sep + local_name) whether or not the name - has a prefix. - - Note: Calling XML_SetReturnNSTriplet after XML_Parse or - XML_ParseBuffer has no effect. -*/ - -XMLPARSEAPI(void) -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); - -/* This value is passed as the userData argument to callbacks. */ -XMLPARSEAPI(void) -XML_SetUserData(XML_Parser parser, void *userData); - -/* Returns the last value set by XML_SetUserData or NULL. */ -#define XML_GetUserData(parser) (*(void **)(parser)) - -/* This is equivalent to supplying an encoding argument to - XML_ParserCreate. On success XML_SetEncoding returns non-zero, - zero otherwise. - Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer - has no effect and returns XML_STATUS_ERROR. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); - -/* If this function is called, then the parser will be passed as the - first argument to callbacks instead of userData. The userData will - still be accessible using XML_GetUserData. -*/ -XMLPARSEAPI(void) -XML_UseParserAsHandlerArg(XML_Parser parser); - -/* If useDTD == XML_TRUE is passed to this function, then the parser - will assume that there is an external subset, even if none is - specified in the document. In such a case the parser will call the - externalEntityRefHandler with a value of NULL for the systemId - argument (the publicId and context arguments will be NULL as well). - Note: If this function is called, then this must be done before - the first call to XML_Parse or XML_ParseBuffer, since it will - have no effect after that. Returns - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. - Note: If the document does not have a DOCTYPE declaration at all, - then startDoctypeDeclHandler and endDoctypeDeclHandler will not - be called, despite an external subset being parsed. - Note: If XML_DTD is not defined when Expat is compiled, returns - XML_ERROR_FEATURE_REQUIRES_XML_DTD. -*/ -XMLPARSEAPI(enum XML_Error) -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); - - -/* Sets the base to be used for resolving relative URIs in system - identifiers in declarations. Resolving relative identifiers is - left to the application: this value will be passed through as the - base argument to the XML_ExternalEntityRefHandler, - XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base - argument will be copied. Returns XML_STATUS_ERROR if out of memory, - XML_STATUS_OK otherwise. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetBase(XML_Parser parser, const XML_Char *base); - -XMLPARSEAPI(const XML_Char *) -XML_GetBase(XML_Parser parser); - -/* Returns the number of the attribute/value pairs passed in last call - to the XML_StartElementHandler that were specified in the start-tag - rather than defaulted. Each attribute/value pair counts as 2; thus - this correspondds to an index into the atts array passed to the - XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetSpecifiedAttributeCount(XML_Parser parser); - -/* Returns the index of the ID attribute passed in the last call to - XML_StartElementHandler, or -1 if there is no ID attribute. Each - attribute/value pair counts as 2; thus this correspondds to an - index into the atts array passed to the XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetIdAttributeIndex(XML_Parser parser); - -/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is - detected. The last call to XML_Parse must have isFinal true; len - may be zero for this call (or any other). - - Though the return values for these functions has always been - described as a Boolean value, the implementation, at least for the - 1.95.x series, has always returned exactly one of the XML_Status - values. -*/ -XMLPARSEAPI(enum XML_Status) -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); - -XMLPARSEAPI(void *) -XML_GetBuffer(XML_Parser parser, int len); - -XMLPARSEAPI(enum XML_Status) -XML_ParseBuffer(XML_Parser parser, int len, int isFinal); - -/* Creates an XML_Parser object that can parse an external general - entity; context is a '\0'-terminated string specifying the parse - context; encoding is a '\0'-terminated string giving the name of - the externally specified encoding, or NULL if there is no - externally specified encoding. The context string consists of a - sequence of tokens separated by formfeeds (\f); a token consisting - of a name specifies that the general entity of the name is open; a - token of the form prefix=uri specifies the namespace for a - particular prefix; a token of the form =uri specifies the default - namespace. This can be called at any point after the first call to - an ExternalEntityRefHandler so longer as the parser has not yet - been freed. The new parser is completely independent and may - safely be used in a separate thread. The handlers and userData are - initialized from the parser argument. Returns NULL if out of memory. - Otherwise returns a new XML_Parser object. -*/ -XMLPARSEAPI(XML_Parser) -XML_ExternalEntityParserCreate(XML_Parser parser, - const XML_Char *context, - const XML_Char *encoding); - -enum XML_ParamEntityParsing { - XML_PARAM_ENTITY_PARSING_NEVER, - XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, - XML_PARAM_ENTITY_PARSING_ALWAYS -}; - -/* Controls parsing of parameter entities (including the external DTD - subset). If parsing of parameter entities is enabled, then - references to external parameter entities (including the external - DTD subset) will be passed to the handler set with - XML_SetExternalEntityRefHandler. The context passed will be 0. - - Unlike external general entities, external parameter entities can - only be parsed synchronously. If the external parameter entity is - to be parsed, it must be parsed during the call to the external - entity ref handler: the complete sequence of - XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and - XML_ParserFree calls must be made during this call. After - XML_ExternalEntityParserCreate has been called to create the parser - for the external parameter entity (context must be 0 for this - call), it is illegal to make any calls on the old parser until - XML_ParserFree has been called on the newly created parser. - If the library has been compiled without support for parameter - entity parsing (ie without XML_DTD being defined), then - XML_SetParamEntityParsing will return 0 if parsing of parameter - entities is requested; otherwise it will return non-zero. - Note: If XML_SetParamEntityParsing is called after XML_Parse or - XML_ParseBuffer, then it has no effect and will always return 0. -*/ -XMLPARSEAPI(int) -XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing parsing); - -/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then - XML_GetErrorCode returns information about the error. -*/ -XMLPARSEAPI(enum XML_Error) -XML_GetErrorCode(XML_Parser parser); - -/* These functions return information about the current parse - location. They may be called from any callback called to report - some parse event; in this case the location is the location of the - first of the sequence of characters that generated the event. When - called from callbacks generated by declarations in the document - prologue, the location identified isn't as neatly defined, but will - be within the relevant markup. When called outside of the callback - functions, the position indicated will be just past the last parse - event (regardless of whether there was an associated callback). - - They may also be called after returning from a call to XML_Parse - or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then - the location is the location of the character at which the error - was detected; otherwise the location is the location of the last - parse event, as described above. -*/ -XMLPARSEAPI(int) XML_GetCurrentLineNumber(XML_Parser parser); -XMLPARSEAPI(int) XML_GetCurrentColumnNumber(XML_Parser parser); -XMLPARSEAPI(long) XML_GetCurrentByteIndex(XML_Parser parser); - -/* Return the number of bytes in the current event. - Returns 0 if the event is in an internal entity. -*/ -XMLPARSEAPI(int) -XML_GetCurrentByteCount(XML_Parser parser); - -/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets - the integer pointed to by offset to the offset within this buffer - of the current parse position, and sets the integer pointed to by size - to the size of this buffer (the number of input bytes). Otherwise - returns a NULL pointer. Also returns a NULL pointer if a parse isn't - active. - - NOTE: The character pointer returned should not be used outside - the handler that makes the call. -*/ -XMLPARSEAPI(const char *) -XML_GetInputContext(XML_Parser parser, - int *offset, - int *size); - -/* For backwards compatibility with previous versions. */ -#define XML_GetErrorLineNumber XML_GetCurrentLineNumber -#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber -#define XML_GetErrorByteIndex XML_GetCurrentByteIndex - -/* Frees the content model passed to the element declaration handler */ -XMLPARSEAPI(void) -XML_FreeContentModel(XML_Parser parser, XML_Content *model); - -/* Exposing the memory handling functions used in Expat */ -XMLPARSEAPI(void *) -XML_MemMalloc(XML_Parser parser, size_t size); - -XMLPARSEAPI(void *) -XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); - -XMLPARSEAPI(void) -XML_MemFree(XML_Parser parser, void *ptr); - -/* Frees memory used by the parser. */ -XMLPARSEAPI(void) -XML_ParserFree(XML_Parser parser); - -/* Returns a string describing the error. */ -XMLPARSEAPI(const XML_LChar *) -XML_ErrorString(enum XML_Error code); - -/* Return a string containing the version number of this expat */ -XMLPARSEAPI(const XML_LChar *) -XML_ExpatVersion(void); - -typedef struct { - int major; - int minor; - int micro; -} XML_Expat_Version; - -/* Return an XML_Expat_Version structure containing numeric version - number information for this version of expat. -*/ -XMLPARSEAPI(XML_Expat_Version) -XML_ExpatVersionInfo(void); - -/* Added in Expat 1.95.5. */ -enum XML_FeatureEnum { - XML_FEATURE_END = 0, - XML_FEATURE_UNICODE, - XML_FEATURE_UNICODE_WCHAR_T, - XML_FEATURE_DTD, - XML_FEATURE_CONTEXT_BYTES, - XML_FEATURE_MIN_SIZE, - XML_FEATURE_SIZEOF_XML_CHAR, - XML_FEATURE_SIZEOF_XML_LCHAR - /* Additional features must be added to the end of this enum. */ -}; - -typedef struct { - enum XML_FeatureEnum feature; - const XML_LChar *name; - long int value; -} XML_Feature; - -XMLPARSEAPI(const XML_Feature *) -XML_GetFeatureList(void); - - -/* Expat follows the GNU/Linux convention of odd number minor version for - beta/development releases and even number minor version for stable - releases. Micro is bumped with each release, and set to 0 with each - change to major or minor version. -*/ -#define XML_MAJOR_VERSION 1 -#define XML_MINOR_VERSION 95 -#define XML_MICRO_VERSION 7 - -#ifdef __cplusplus -} -#endif - -#endif /* not XmlParse_INCLUDED */ diff --git a/gpsbabel/mingw/includew/expat.h b/gpsbabel/mingw/includew/expat.h deleted file mode 100644 index c6a4b3b6c..000000000 --- a/gpsbabel/mingw/includew/expat.h +++ /dev/null @@ -1,1013 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - See the file COPYING for copying permission. -*/ - -#ifndef Expat_INCLUDED -#define Expat_INCLUDED 1 - -#ifdef __VMS -/* 0 1 2 3 0 1 2 3 - 1234567890123456789012345678901 1234567890123456789012345678901 */ -#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler -#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler -#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler -#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg -#endif - -#include -#include "expat_external.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct XML_ParserStruct; -typedef struct XML_ParserStruct *XML_Parser; - -/* Should this be defined using stdbool.h when C99 is available? */ -typedef unsigned char XML_Bool; -#define XML_TRUE ((XML_Bool) 1) -#define XML_FALSE ((XML_Bool) 0) - -/* The XML_Status enum gives the possible return values for several - API functions. The preprocessor #defines are included so this - stanza can be added to code that still needs to support older - versions of Expat 1.95.x: - - #ifndef XML_STATUS_OK - #define XML_STATUS_OK 1 - #define XML_STATUS_ERROR 0 - #endif - - Otherwise, the #define hackery is quite ugly and would have been - dropped. -*/ -enum XML_Status { - XML_STATUS_ERROR = 0, -#define XML_STATUS_ERROR XML_STATUS_ERROR - XML_STATUS_OK = 1, -#define XML_STATUS_OK XML_STATUS_OK - XML_STATUS_SUSPENDED = 2 -#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED -}; - -enum XML_Error { - XML_ERROR_NONE, - XML_ERROR_NO_MEMORY, - XML_ERROR_SYNTAX, - XML_ERROR_NO_ELEMENTS, - XML_ERROR_INVALID_TOKEN, - XML_ERROR_UNCLOSED_TOKEN, - XML_ERROR_PARTIAL_CHAR, - XML_ERROR_TAG_MISMATCH, - XML_ERROR_DUPLICATE_ATTRIBUTE, - XML_ERROR_JUNK_AFTER_DOC_ELEMENT, - XML_ERROR_PARAM_ENTITY_REF, - XML_ERROR_UNDEFINED_ENTITY, - XML_ERROR_RECURSIVE_ENTITY_REF, - XML_ERROR_ASYNC_ENTITY, - XML_ERROR_BAD_CHAR_REF, - XML_ERROR_BINARY_ENTITY_REF, - XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, - XML_ERROR_MISPLACED_XML_PI, - XML_ERROR_UNKNOWN_ENCODING, - XML_ERROR_INCORRECT_ENCODING, - XML_ERROR_UNCLOSED_CDATA_SECTION, - XML_ERROR_EXTERNAL_ENTITY_HANDLING, - XML_ERROR_NOT_STANDALONE, - XML_ERROR_UNEXPECTED_STATE, - XML_ERROR_ENTITY_DECLARED_IN_PE, - XML_ERROR_FEATURE_REQUIRES_XML_DTD, - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, - /* Added in 1.95.7. */ - XML_ERROR_UNBOUND_PREFIX, - /* Added in 1.95.8. */ - XML_ERROR_UNDECLARING_PREFIX, - XML_ERROR_INCOMPLETE_PE, - XML_ERROR_XML_DECL, - XML_ERROR_TEXT_DECL, - XML_ERROR_PUBLICID, - XML_ERROR_SUSPENDED, - XML_ERROR_NOT_SUSPENDED, - XML_ERROR_ABORTED, - XML_ERROR_FINISHED, - XML_ERROR_SUSPEND_PE, - /* Added in 2.0. */ - XML_ERROR_RESERVED_PREFIX_XML, - XML_ERROR_RESERVED_PREFIX_XMLNS, - XML_ERROR_RESERVED_NAMESPACE_URI -}; - -enum XML_Content_Type { - XML_CTYPE_EMPTY = 1, - XML_CTYPE_ANY, - XML_CTYPE_MIXED, - XML_CTYPE_NAME, - XML_CTYPE_CHOICE, - XML_CTYPE_SEQ -}; - -enum XML_Content_Quant { - XML_CQUANT_NONE, - XML_CQUANT_OPT, - XML_CQUANT_REP, - XML_CQUANT_PLUS -}; - -/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be - XML_CQUANT_NONE, and the other fields will be zero or NULL. - If type == XML_CTYPE_MIXED, then quant will be NONE or REP and - numchildren will contain number of elements that may be mixed in - and children point to an array of XML_Content cells that will be - all of XML_CTYPE_NAME type with no quantification. - - If type == XML_CTYPE_NAME, then the name points to the name, and - the numchildren field will be zero and children will be NULL. The - quant fields indicates any quantifiers placed on the name. - - CHOICE and SEQ will have name NULL, the number of children in - numchildren and children will point, recursively, to an array - of XML_Content cells. - - The EMPTY, ANY, and MIXED types will only occur at top level. -*/ - -typedef struct XML_cp XML_Content; - -struct XML_cp { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - XML_Char * name; - unsigned int numchildren; - XML_Content * children; -}; - - -/* This is called for an element declaration. See above for - description of the model argument. It's the caller's responsibility - to free model when finished with it. -*/ -typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, - const XML_Char *name, - XML_Content *model); - -XMLPARSEAPI(void) -XML_SetElementDeclHandler(XML_Parser parser, - XML_ElementDeclHandler eldecl); - -/* The Attlist declaration handler is called for *each* attribute. So - a single Attlist declaration with multiple attributes declared will - generate multiple calls to this handler. The "default" parameter - may be NULL in the case of the "#IMPLIED" or "#REQUIRED" - keyword. The "isrequired" parameter will be true and the default - value will be NULL in the case of "#REQUIRED". If "isrequired" is - true and default is non-NULL, then this is a "#FIXED" default. -*/ -typedef void (XMLCALL *XML_AttlistDeclHandler) ( - void *userData, - const XML_Char *elname, - const XML_Char *attname, - const XML_Char *att_type, - const XML_Char *dflt, - int isrequired); - -XMLPARSEAPI(void) -XML_SetAttlistDeclHandler(XML_Parser parser, - XML_AttlistDeclHandler attdecl); - -/* The XML declaration handler is called for *both* XML declarations - and text declarations. The way to distinguish is that the version - parameter will be NULL for text declarations. The encoding - parameter may be NULL for XML declarations. The standalone - parameter will be -1, 0, or 1 indicating respectively that there - was no standalone parameter in the declaration, that it was given - as no, or that it was given as yes. -*/ -typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, - const XML_Char *version, - const XML_Char *encoding, - int standalone); - -XMLPARSEAPI(void) -XML_SetXmlDeclHandler(XML_Parser parser, - XML_XmlDeclHandler xmldecl); - - -typedef struct { - void *(*malloc_fcn)(size_t size); - void *(*realloc_fcn)(void *ptr, size_t size); - void (*free_fcn)(void *ptr); -} XML_Memory_Handling_Suite; - -/* Constructs a new parser; encoding is the encoding specified by the - external protocol or NULL if there is none specified. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate(const XML_Char *encoding); - -/* Constructs a new parser and namespace processor. Element type - names and attribute names that belong to a namespace will be - expanded; unprefixed attribute names are never expanded; unprefixed - element type names are expanded only if there is a default - namespace. The expanded name is the concatenation of the namespace - URI, the namespace separator character, and the local part of the - name. If the namespace separator is '\0' then the namespace URI - and the local part will be concatenated without any separator. - It is a programming error to use the separator '\0' with namespace - triplets (see XML_SetReturnNSTriplet). -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); - - -/* Constructs a new parser using the memory management suite referred to - by memsuite. If memsuite is NULL, then use the standard library memory - suite. If namespaceSeparator is non-NULL it creates a parser with - namespace processing as described above. The character pointed at - will serve as the namespace separator. - - All further memory operations used for the created parser will come from - the given suite. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate_MM(const XML_Char *encoding, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *namespaceSeparator); - -/* Prepare a parser object to be re-used. This is particularly - valuable when memory allocation overhead is disproportionatly high, - such as when a large number of small documnents need to be parsed. - All handlers are cleared from the parser, except for the - unknownEncodingHandler. The parser's external state is re-initialized - except for the values of ns and ns_triplets. - - Added in Expat 1.95.3. -*/ -XMLPARSEAPI(XML_Bool) -XML_ParserReset(XML_Parser parser, const XML_Char *encoding); - -/* atts is array of name/value pairs, terminated by 0; - names and values are 0 terminated. -*/ -typedef void (XMLCALL *XML_StartElementHandler) (void *userData, - const XML_Char *name, - const XML_Char **atts); - -typedef void (XMLCALL *XML_EndElementHandler) (void *userData, - const XML_Char *name); - - -/* s is not 0 terminated. */ -typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, - const XML_Char *s, - int len); - -/* target and data are 0 terminated */ -typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( - void *userData, - const XML_Char *target, - const XML_Char *data); - -/* data is 0 terminated */ -typedef void (XMLCALL *XML_CommentHandler) (void *userData, - const XML_Char *data); - -typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); -typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); - -/* This is called for any characters in the XML document for which - there is no applicable handler. This includes both characters that - are part of markup which is of a kind that is not reported - (comments, markup declarations), or characters that are part of a - construct which could be reported but for which no handler has been - supplied. The characters are passed exactly as they were in the XML - document except that they will be encoded in UTF-8 or UTF-16. - Line boundaries are not normalized. Note that a byte order mark - character is not passed to the default handler. There are no - guarantees about how characters are divided between calls to the - default handler: for example, a comment might be split between - multiple calls. -*/ -typedef void (XMLCALL *XML_DefaultHandler) (void *userData, - const XML_Char *s, - int len); - -/* This is called for the start of the DOCTYPE declaration, before - any DTD or internal subset is parsed. -*/ -typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( - void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset); - -/* This is called for the start of the DOCTYPE declaration when the - closing > is encountered, but after processing any external - subset. -*/ -typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); - -/* This is called for entity declarations. The is_parameter_entity - argument will be non-zero if the entity is a parameter entity, zero - otherwise. - - For internal entities (), value will - be non-NULL and systemId, publicID, and notationName will be NULL. - The value string is NOT nul-terminated; the length is provided in - the value_length argument. Since it is legal to have zero-length - values, do not use this argument to test for internal entities. - - For external entities, value will be NULL and systemId will be - non-NULL. The publicId argument will be NULL unless a public - identifier was provided. The notationName argument will have a - non-NULL value only for unparsed entity declarations. - - Note that is_parameter_entity can't be changed to XML_Bool, since - that would break binary compatibility. -*/ -typedef void (XMLCALL *XML_EntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity, - const XML_Char *value, - int value_length, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -XMLPARSEAPI(void) -XML_SetEntityDeclHandler(XML_Parser parser, - XML_EntityDeclHandler handler); - -/* OBSOLETE -- OBSOLETE -- OBSOLETE - This handler has been superceded by the EntityDeclHandler above. - It is provided here for backward compatibility. - - This is called for a declaration of an unparsed (NDATA) entity. - The base argument is whatever was set by XML_SetBase. The - entityName, systemId and notationName arguments will never be - NULL. The other arguments may be. -*/ -typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -/* This is called for a declaration of notation. The base argument is - whatever was set by XML_SetBase. The notationName will never be - NULL. The other arguments can be. -*/ -typedef void (XMLCALL *XML_NotationDeclHandler) ( - void *userData, - const XML_Char *notationName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* When namespace processing is enabled, these are called once for - each namespace declaration. The call to the start and end element - handlers occur between the calls to the start and end namespace - declaration handlers. For an xmlns attribute, prefix will be - NULL. For an xmlns="" attribute, uri will be NULL. -*/ -typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix, - const XML_Char *uri); - -typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix); - -/* This is called if the document is not standalone, that is, it has an - external subset or a reference to a parameter entity, but does not - have standalone="yes". If this handler returns XML_STATUS_ERROR, - then processing will not continue, and the parser will return a - XML_ERROR_NOT_STANDALONE error. - If parameter entity parsing is enabled, then in addition to the - conditions above this handler will only be called if the referenced - entity was actually read. -*/ -typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); - -/* This is called for a reference to an external parsed general - entity. The referenced entity is not automatically parsed. The - application can parse it immediately or later using - XML_ExternalEntityParserCreate. - - The parser argument is the parser parsing the entity containing the - reference; it can be passed as the parser argument to - XML_ExternalEntityParserCreate. The systemId argument is the - system identifier as specified in the entity declaration; it will - not be NULL. - - The base argument is the system identifier that should be used as - the base for resolving systemId if systemId was relative; this is - set by XML_SetBase; it may be NULL. - - The publicId argument is the public identifier as specified in the - entity declaration, or NULL if none was specified; the whitespace - in the public identifier will have been normalized as required by - the XML spec. - - The context argument specifies the parsing context in the format - expected by the context argument to XML_ExternalEntityParserCreate; - context is valid only until the handler returns, so if the - referenced entity is to be parsed later, it must be copied. - context is NULL only when the entity is a parameter entity. - - The handler should return XML_STATUS_ERROR if processing should not - continue because of a fatal error in the handling of the external - entity. In this case the calling parser will return an - XML_ERROR_EXTERNAL_ENTITY_HANDLING error. - - Note that unlike other handlers the first argument is the parser, - not userData. -*/ -typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( - XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* This is called in two situations: - 1) An entity reference is encountered for which no declaration - has been read *and* this is not an error. - 2) An internal entity reference is read, but not expanded, because - XML_SetDefaultHandler has been called. - Note: skipped parameter entities in declarations and skipped general - entities in attribute values cannot be reported, because - the event would be out of sync with the reporting of the - declarations or attribute values -*/ -typedef void (XMLCALL *XML_SkippedEntityHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity); - -/* This structure is filled in by the XML_UnknownEncodingHandler to - provide information to the parser about encodings that are unknown - to the parser. - - The map[b] member gives information about byte sequences whose - first byte is b. - - If map[b] is c where c is >= 0, then b by itself encodes the - Unicode scalar value c. - - If map[b] is -1, then the byte sequence is malformed. - - If map[b] is -n, where n >= 2, then b is the first byte of an - n-byte sequence that encodes a single Unicode scalar value. - - The data member will be passed as the first argument to the convert - function. - - The convert function is used to convert multibyte sequences; s will - point to a n-byte sequence where map[(unsigned char)*s] == -n. The - convert function must return the Unicode scalar value represented - by this byte sequence or -1 if the byte sequence is malformed. - - The convert function may be NULL if the encoding is a single-byte - encoding, that is if map[b] >= -1 for all bytes b. - - When the parser is finished with the encoding, then if release is - not NULL, it will call release passing it the data member; once - release has been called, the convert function will not be called - again. - - Expat places certain restrictions on the encodings that are supported - using this mechanism. - - 1. Every ASCII character that can appear in a well-formed XML document, - other than the characters - - $@\^`{}~ - - must be represented by a single byte, and that byte must be the - same byte that represents that character in ASCII. - - 2. No character may require more than 4 bytes to encode. - - 3. All characters encoded must have Unicode scalar values <= - 0xFFFF, (i.e., characters that would be encoded by surrogates in - UTF-16 are not allowed). Note that this restriction doesn't - apply to the built-in support for UTF-8 and UTF-16. - - 4. No Unicode character may be encoded by more than one distinct - sequence of bytes. -*/ -typedef struct { - int map[256]; - void *data; - int (XMLCALL *convert)(void *data, const char *s); - void (XMLCALL *release)(void *data); -} XML_Encoding; - -/* This is called for an encoding that is unknown to the parser. - - The encodingHandlerData argument is that which was passed as the - second argument to XML_SetUnknownEncodingHandler. - - The name argument gives the name of the encoding as specified in - the encoding declaration. - - If the callback can provide information about the encoding, it must - fill in the XML_Encoding structure, and return XML_STATUS_OK. - Otherwise it must return XML_STATUS_ERROR. - - If info does not describe a suitable encoding, then the parser will - return an XML_UNKNOWN_ENCODING error. -*/ -typedef int (XMLCALL *XML_UnknownEncodingHandler) ( - void *encodingHandlerData, - const XML_Char *name, - XML_Encoding *info); - -XMLPARSEAPI(void) -XML_SetElementHandler(XML_Parser parser, - XML_StartElementHandler start, - XML_EndElementHandler end); - -XMLPARSEAPI(void) -XML_SetStartElementHandler(XML_Parser parser, - XML_StartElementHandler handler); - -XMLPARSEAPI(void) -XML_SetEndElementHandler(XML_Parser parser, - XML_EndElementHandler handler); - -XMLPARSEAPI(void) -XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler); - -XMLPARSEAPI(void) -XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler); -XMLPARSEAPI(void) -XML_SetCommentHandler(XML_Parser parser, - XML_CommentHandler handler); - -XMLPARSEAPI(void) -XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end); - -XMLPARSEAPI(void) -XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start); - -XMLPARSEAPI(void) -XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end); - -/* This sets the default handler and also inhibits expansion of - internal entities. These entity references will be passed to the - default handler, or to the skipped entity handler, if one is set. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandler(XML_Parser parser, - XML_DefaultHandler handler); - -/* This sets the default handler but does not inhibit expansion of - internal entities. The entity reference will not be passed to the - default handler. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandlerExpand(XML_Parser parser, - XML_DefaultHandler handler); - -XMLPARSEAPI(void) -XML_SetDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndDoctypeDeclHandler(XML_Parser parser, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNotationDeclHandler(XML_Parser parser, - XML_NotationDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler); - -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler); - -/* If a non-NULL value for arg is specified here, then it will be - passed as the first argument to the external entity ref handler - instead of the parser object. -*/ -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandlerArg(XML_Parser parser, - void *arg); - -XMLPARSEAPI(void) -XML_SetSkippedEntityHandler(XML_Parser parser, - XML_SkippedEntityHandler handler); - -XMLPARSEAPI(void) -XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, - void *encodingHandlerData); - -/* This can be called within a handler for a start element, end - element, processing instruction or character data. It causes the - corresponding markup to be passed to the default handler. -*/ -XMLPARSEAPI(void) -XML_DefaultCurrent(XML_Parser parser); - -/* If do_nst is non-zero, and namespace processing is in effect, and - a name has a prefix (i.e. an explicit namespace qualifier) then - that name is returned as a triplet in a single string separated by - the separator character specified when the parser was created: URI - + sep + local_name + sep + prefix. - - If do_nst is zero, then namespace information is returned in the - default manner (URI + sep + local_name) whether or not the name - has a prefix. - - Note: Calling XML_SetReturnNSTriplet after XML_Parse or - XML_ParseBuffer has no effect. -*/ - -XMLPARSEAPI(void) -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); - -/* This value is passed as the userData argument to callbacks. */ -XMLPARSEAPI(void) -XML_SetUserData(XML_Parser parser, void *userData); - -/* Returns the last value set by XML_SetUserData or NULL. */ -#define XML_GetUserData(parser) (*(void **)(parser)) - -/* This is equivalent to supplying an encoding argument to - XML_ParserCreate. On success XML_SetEncoding returns non-zero, - zero otherwise. - Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer - has no effect and returns XML_STATUS_ERROR. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); - -/* If this function is called, then the parser will be passed as the - first argument to callbacks instead of userData. The userData will - still be accessible using XML_GetUserData. -*/ -XMLPARSEAPI(void) -XML_UseParserAsHandlerArg(XML_Parser parser); - -/* If useDTD == XML_TRUE is passed to this function, then the parser - will assume that there is an external subset, even if none is - specified in the document. In such a case the parser will call the - externalEntityRefHandler with a value of NULL for the systemId - argument (the publicId and context arguments will be NULL as well). - Note: For the purpose of checking WFC: Entity Declared, passing - useDTD == XML_TRUE will make the parser behave as if the document - had a DTD with an external subset. - Note: If this function is called, then this must be done before - the first call to XML_Parse or XML_ParseBuffer, since it will - have no effect after that. Returns - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. - Note: If the document does not have a DOCTYPE declaration at all, - then startDoctypeDeclHandler and endDoctypeDeclHandler will not - be called, despite an external subset being parsed. - Note: If XML_DTD is not defined when Expat is compiled, returns - XML_ERROR_FEATURE_REQUIRES_XML_DTD. -*/ -XMLPARSEAPI(enum XML_Error) -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); - - -/* Sets the base to be used for resolving relative URIs in system - identifiers in declarations. Resolving relative identifiers is - left to the application: this value will be passed through as the - base argument to the XML_ExternalEntityRefHandler, - XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base - argument will be copied. Returns XML_STATUS_ERROR if out of memory, - XML_STATUS_OK otherwise. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetBase(XML_Parser parser, const XML_Char *base); - -XMLPARSEAPI(const XML_Char *) -XML_GetBase(XML_Parser parser); - -/* Returns the number of the attribute/value pairs passed in last call - to the XML_StartElementHandler that were specified in the start-tag - rather than defaulted. Each attribute/value pair counts as 2; thus - this correspondds to an index into the atts array passed to the - XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetSpecifiedAttributeCount(XML_Parser parser); - -/* Returns the index of the ID attribute passed in the last call to - XML_StartElementHandler, or -1 if there is no ID attribute. Each - attribute/value pair counts as 2; thus this correspondds to an - index into the atts array passed to the XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetIdAttributeIndex(XML_Parser parser); - -/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is - detected. The last call to XML_Parse must have isFinal true; len - may be zero for this call (or any other). - - Though the return values for these functions has always been - described as a Boolean value, the implementation, at least for the - 1.95.x series, has always returned exactly one of the XML_Status - values. -*/ -XMLPARSEAPI(enum XML_Status) -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); - -XMLPARSEAPI(void *) -XML_GetBuffer(XML_Parser parser, int len); - -XMLPARSEAPI(enum XML_Status) -XML_ParseBuffer(XML_Parser parser, int len, int isFinal); - -/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. - Must be called from within a call-back handler, except when aborting - (resumable = 0) an already suspended parser. Some call-backs may - still follow because they would otherwise get lost. Examples: - - endElementHandler() for empty elements when stopped in - startElementHandler(), - - endNameSpaceDeclHandler() when stopped in endElementHandler(), - and possibly others. - - Can be called from most handlers, including DTD related call-backs, - except when parsing an external parameter entity and resumable != 0. - Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. - Possible error codes: - - XML_ERROR_SUSPENDED: when suspending an already suspended parser. - - XML_ERROR_FINISHED: when the parser has already finished. - - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. - - When resumable != 0 (true) then parsing is suspended, that is, - XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. - Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() - return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. - - *Note*: - This will be applied to the current parser instance only, that is, if - there is a parent parser then it will continue parsing when the - externalEntityRefHandler() returns. It is up to the implementation of - the externalEntityRefHandler() to call XML_StopParser() on the parent - parser (recursively), if one wants to stop parsing altogether. - - When suspended, parsing can be resumed by calling XML_ResumeParser(). -*/ -XMLPARSEAPI(enum XML_Status) -XML_StopParser(XML_Parser parser, XML_Bool resumable); - -/* Resumes parsing after it has been suspended with XML_StopParser(). - Must not be called from within a handler call-back. Returns same - status codes as XML_Parse() or XML_ParseBuffer(). - Additional error code XML_ERROR_NOT_SUSPENDED possible. - - *Note*: - This must be called on the most deeply nested child parser instance - first, and on its parent parser only after the child parser has finished, - to be applied recursively until the document entity's parser is restarted. - That is, the parent parser will not resume by itself and it is up to the - application to call XML_ResumeParser() on it at the appropriate moment. -*/ -XMLPARSEAPI(enum XML_Status) -XML_ResumeParser(XML_Parser parser); - -enum XML_Parsing { - XML_INITIALIZED, - XML_PARSING, - XML_FINISHED, - XML_SUSPENDED -}; - -typedef struct { - enum XML_Parsing parsing; - XML_Bool finalBuffer; -} XML_ParsingStatus; - -/* Returns status of parser with respect to being initialized, parsing, - finished, or suspended and processing the final buffer. - XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, - XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED -*/ -XMLPARSEAPI(void) -XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); - -/* Creates an XML_Parser object that can parse an external general - entity; context is a '\0'-terminated string specifying the parse - context; encoding is a '\0'-terminated string giving the name of - the externally specified encoding, or NULL if there is no - externally specified encoding. The context string consists of a - sequence of tokens separated by formfeeds (\f); a token consisting - of a name specifies that the general entity of the name is open; a - token of the form prefix=uri specifies the namespace for a - particular prefix; a token of the form =uri specifies the default - namespace. This can be called at any point after the first call to - an ExternalEntityRefHandler so longer as the parser has not yet - been freed. The new parser is completely independent and may - safely be used in a separate thread. The handlers and userData are - initialized from the parser argument. Returns NULL if out of memory. - Otherwise returns a new XML_Parser object. -*/ -XMLPARSEAPI(XML_Parser) -XML_ExternalEntityParserCreate(XML_Parser parser, - const XML_Char *context, - const XML_Char *encoding); - -enum XML_ParamEntityParsing { - XML_PARAM_ENTITY_PARSING_NEVER, - XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, - XML_PARAM_ENTITY_PARSING_ALWAYS -}; - -/* Controls parsing of parameter entities (including the external DTD - subset). If parsing of parameter entities is enabled, then - references to external parameter entities (including the external - DTD subset) will be passed to the handler set with - XML_SetExternalEntityRefHandler. The context passed will be 0. - - Unlike external general entities, external parameter entities can - only be parsed synchronously. If the external parameter entity is - to be parsed, it must be parsed during the call to the external - entity ref handler: the complete sequence of - XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and - XML_ParserFree calls must be made during this call. After - XML_ExternalEntityParserCreate has been called to create the parser - for the external parameter entity (context must be 0 for this - call), it is illegal to make any calls on the old parser until - XML_ParserFree has been called on the newly created parser. - If the library has been compiled without support for parameter - entity parsing (ie without XML_DTD being defined), then - XML_SetParamEntityParsing will return 0 if parsing of parameter - entities is requested; otherwise it will return non-zero. - Note: If XML_SetParamEntityParsing is called after XML_Parse or - XML_ParseBuffer, then it has no effect and will always return 0. -*/ -XMLPARSEAPI(int) -XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing parsing); - -/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then - XML_GetErrorCode returns information about the error. -*/ -XMLPARSEAPI(enum XML_Error) -XML_GetErrorCode(XML_Parser parser); - -/* These functions return information about the current parse - location. They may be called from any callback called to report - some parse event; in this case the location is the location of the - first of the sequence of characters that generated the event. When - called from callbacks generated by declarations in the document - prologue, the location identified isn't as neatly defined, but will - be within the relevant markup. When called outside of the callback - functions, the position indicated will be just past the last parse - event (regardless of whether there was an associated callback). - - They may also be called after returning from a call to XML_Parse - or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then - the location is the location of the character at which the error - was detected; otherwise the location is the location of the last - parse event, as described above. -*/ -XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); -XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); -XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); - -/* Return the number of bytes in the current event. - Returns 0 if the event is in an internal entity. -*/ -XMLPARSEAPI(int) -XML_GetCurrentByteCount(XML_Parser parser); - -/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets - the integer pointed to by offset to the offset within this buffer - of the current parse position, and sets the integer pointed to by size - to the size of this buffer (the number of input bytes). Otherwise - returns a NULL pointer. Also returns a NULL pointer if a parse isn't - active. - - NOTE: The character pointer returned should not be used outside - the handler that makes the call. -*/ -XMLPARSEAPI(const char *) -XML_GetInputContext(XML_Parser parser, - int *offset, - int *size); - -/* For backwards compatibility with previous versions. */ -#define XML_GetErrorLineNumber XML_GetCurrentLineNumber -#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber -#define XML_GetErrorByteIndex XML_GetCurrentByteIndex - -/* Frees the content model passed to the element declaration handler */ -XMLPARSEAPI(void) -XML_FreeContentModel(XML_Parser parser, XML_Content *model); - -/* Exposing the memory handling functions used in Expat */ -XMLPARSEAPI(void *) -XML_MemMalloc(XML_Parser parser, size_t size); - -XMLPARSEAPI(void *) -XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); - -XMLPARSEAPI(void) -XML_MemFree(XML_Parser parser, void *ptr); - -/* Frees memory used by the parser. */ -XMLPARSEAPI(void) -XML_ParserFree(XML_Parser parser); - -/* Returns a string describing the error. */ -XMLPARSEAPI(const XML_LChar *) -XML_ErrorString(enum XML_Error code); - -/* Return a string containing the version number of this expat */ -XMLPARSEAPI(const XML_LChar *) -XML_ExpatVersion(void); - -typedef struct { - int major; - int minor; - int micro; -} XML_Expat_Version; - -/* Return an XML_Expat_Version structure containing numeric version - number information for this version of expat. -*/ -XMLPARSEAPI(XML_Expat_Version) -XML_ExpatVersionInfo(void); - -/* Added in Expat 1.95.5. */ -enum XML_FeatureEnum { - XML_FEATURE_END = 0, - XML_FEATURE_UNICODE, - XML_FEATURE_UNICODE_WCHAR_T, - XML_FEATURE_DTD, - XML_FEATURE_CONTEXT_BYTES, - XML_FEATURE_MIN_SIZE, - XML_FEATURE_SIZEOF_XML_CHAR, - XML_FEATURE_SIZEOF_XML_LCHAR, - XML_FEATURE_NS - /* Additional features must be added to the end of this enum. */ -}; - -typedef struct { - enum XML_FeatureEnum feature; - const XML_LChar *name; - long int value; -} XML_Feature; - -XMLPARSEAPI(const XML_Feature *) -XML_GetFeatureList(void); - - -/* Expat follows the GNU/Linux convention of odd number minor version for - beta/development releases and even number minor version for stable - releases. Micro is bumped with each release, and set to 0 with each - change to major or minor version. -*/ -#define XML_MAJOR_VERSION 2 -#define XML_MINOR_VERSION 0 -#define XML_MICRO_VERSION 0 - -#ifdef __cplusplus -} -#endif - -#endif /* not Expat_INCLUDED */ diff --git a/gpsbabel/mingw/includew/expat_external.h b/gpsbabel/mingw/includew/expat_external.h deleted file mode 100644 index 4cd16923c..000000000 --- a/gpsbabel/mingw/includew/expat_external.h +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - See the file COPYING for copying permission. -*/ - -#ifndef Expat_External_INCLUDED -#define Expat_External_INCLUDED 1 - -/* External API definitions */ - -#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) -#define XML_USE_MSC_EXTENSIONS 1 -#endif - -/* Expat tries very hard to make the API boundary very specifically - defined. There are two macros defined to control this boundary; - each of these can be defined before including this header to - achieve some different behavior, but doing so it not recommended or - tested frequently. - - XMLCALL - The calling convention to use for all calls across the - "library boundary." This will default to cdecl, and - try really hard to tell the compiler that's what we - want. - - XMLIMPORT - Whatever magic is needed to note that a function is - to be imported from a dynamically loaded library - (.dll, .so, or .sl, depending on your platform). - - The XMLCALL macro was added in Expat 1.95.7. The only one which is - expected to be directly useful in client code is XMLCALL. - - Note that on at least some Unix versions, the Expat library must be - compiled with the cdecl calling convention as the default since - system headers may assume the cdecl convention. -*/ -#ifndef XMLCALL -#if defined(XML_USE_MSC_EXTENSIONS) -#define XMLCALL __cdecl -#elif defined(__GNUC__) && defined(__i386) -#define XMLCALL __attribute__((cdecl)) -#else -/* For any platform which uses this definition and supports more than - one calling convention, we need to extend this definition to - declare the convention used on that platform, if it's possible to - do so. - - If this is the case for your platform, please file a bug report - with information on how to identify your platform via the C - pre-processor and how to specify the same calling convention as the - platform's malloc() implementation. -*/ -#define XMLCALL -#endif -#endif /* not defined XMLCALL */ - - -#if !defined(XML_STATIC) && !defined(XMLIMPORT) -#ifndef XML_BUILDING_EXPAT -/* using Expat from an application */ - -#ifdef XML_USE_MSC_EXTENSIONS -#define XMLIMPORT __declspec(dllimport) -#endif - -#endif -#endif /* not defined XML_STATIC */ - - -/* If we didn't define it above, define it away: */ -#ifndef XMLIMPORT -#define XMLIMPORT -#endif - - -#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef XML_UNICODE_WCHAR_T -#define XML_UNICODE -#endif - -#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ -#ifdef XML_UNICODE_WCHAR_T -typedef wchar_t XML_Char; -typedef wchar_t XML_LChar; -#else -typedef unsigned short XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE_WCHAR_T */ -#else /* Information is UTF-8 encoded. */ -typedef char XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE */ - -#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ -#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 -typedef __int64 XML_Index; -typedef unsigned __int64 XML_Size; -#else -typedef long long XML_Index; -typedef unsigned long long XML_Size; -#endif -#else -typedef long XML_Index; -typedef unsigned long XML_Size; -#endif /* XML_LARGE_SIZE */ - -#ifdef __cplusplus -} -#endif - -#endif /* not Expat_External_INCLUDED */ diff --git a/gpsbabel/mingw/lib/README b/gpsbabel/mingw/lib/README deleted file mode 100644 index 7fb24c06b..000000000 --- a/gpsbabel/mingw/lib/README +++ /dev/null @@ -1,3 +0,0 @@ -files created with pexport/dlltool using libexpat.dll -version 1.95.8 from http://sourceforge.net/projects/expat -This is not the latest version, but new versions are not considered necessary. diff --git a/gpsbabel/mingw/lib/libexpat.a b/gpsbabel/mingw/lib/libexpat.a deleted file mode 100644 index 97656d9a2fb538ce63ba77a967f564b58ff6dc79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48984 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 diff --git a/gpsbabel/mingw/lib/libexpat.def b/gpsbabel/mingw/lib/libexpat.def deleted file mode 100755 index ed41244c3..000000000 --- a/gpsbabel/mingw/lib/libexpat.def +++ /dev/null @@ -1,64 +0,0 @@ -LIBRARY LIBEXPAT.dll -EXPORTS -XML_DefaultCurrent -XML_ErrorString -XML_ExpatVersion -XML_ExpatVersionInfo -XML_ExternalEntityParserCreate -XML_FreeContentModel -XML_GetBase -XML_GetBuffer -XML_GetCurrentByteCount -XML_GetCurrentByteIndex -XML_GetCurrentColumnNumber -XML_GetCurrentLineNumber -XML_GetErrorCode -XML_GetFeatureList -XML_GetIdAttributeIndex -XML_GetInputContext -XML_GetSpecifiedAttributeCount -XML_MemFree -XML_MemMalloc -XML_MemRealloc -XML_Parse -XML_ParseBuffer -XML_ParserCreate -XML_ParserCreateNS -XML_ParserCreate_MM -XML_ParserFree -XML_ParserReset -XML_SetAttlistDeclHandler -XML_SetBase -XML_SetCdataSectionHandler -XML_SetCharacterDataHandler -XML_SetCommentHandler -XML_SetDefaultHandler -XML_SetDefaultHandlerExpand -XML_SetDoctypeDeclHandler -XML_SetElementDeclHandler -XML_SetElementHandler -XML_SetEncoding -XML_SetEndCdataSectionHandler -XML_SetEndDoctypeDeclHandler -XML_SetEndElementHandler -XML_SetEndNamespaceDeclHandler -XML_SetEntityDeclHandler -XML_SetExternalEntityRefHandler -XML_SetExternalEntityRefHandlerArg -XML_SetNamespaceDeclHandler -XML_SetNotStandaloneHandler -XML_SetNotationDeclHandler -XML_SetParamEntityParsing -XML_SetProcessingInstructionHandler -XML_SetReturnNSTriplet -XML_SetSkippedEntityHandler -XML_SetStartCdataSectionHandler -XML_SetStartDoctypeDeclHandler -XML_SetStartElementHandler -XML_SetStartNamespaceDeclHandler -XML_SetUnknownEncodingHandler -XML_SetUnparsedEntityDeclHandler -XML_SetUserData -XML_SetXmlDeclHandler -XML_UseForeignDTD -XML_UseParserAsHandlerArg diff --git a/gpsbabel/mingw/libexpat.dll b/gpsbabel/mingw/libexpat.dll deleted file mode 100644 index 4c925de3579d7bc74ea0c85f4d096d0070e09da1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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

o`}M#~TH!R_w*#*Mmjd$$ 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 OwK1x#AZz8=8umYS0vyEv diff --git a/gpsbabel/msvc/Expat/expat.h b/gpsbabel/msvc/Expat/expat.h deleted file mode 100644 index 455e5b8fe..000000000 --- a/gpsbabel/msvc/Expat/expat.h +++ /dev/null @@ -1,1001 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - See the file COPYING for copying permission. -*/ - -#ifndef XmlParse_INCLUDED -#define XmlParse_INCLUDED 1 - -#ifdef __VMS -/* 0 1 2 3 0 1 2 3 - 1234567890123456789012345678901 1234567890123456789012345678901 */ -#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler -#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler -#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler -#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg -#endif - -#include - -#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) -#define XML_USE_MSC_EXTENSIONS 1 -#endif - -/* Expat tries very hard to make the API boundary very specifically - defined. There are two macros defined to control this boundary; - each of these can be defined before including this header to - achieve some different behavior, but doing so it not recommended or - tested frequently. - - XMLCALL - The calling convention to use for all calls across the - "library boundary." This will default to cdecl, and - try really hard to tell the compiler that's what we - want. - - XMLIMPORT - Whatever magic is needed to note that a function is - to be imported from a dynamically loaded library - (.dll, .so, or .sl, depending on your platform). - - The XMLCALL macro was added in Expat 1.95.7. The only one which is - expected to be directly useful in client code is XMLCALL. - - Note that on at least some Unix versions, the Expat library must be - compiled with the cdecl calling convention as the default since - system headers may assume the cdecl convention. -*/ -#ifndef XMLCALL -#if defined(XML_USE_MSC_EXTENSIONS) -#define XMLCALL __cdecl -#elif defined(__GNUC__) -#define XMLCALL __attribute__((cdecl)) -#else -/* For any platform which uses this definition and supports more than - one calling convention, we need to extend this definition to - declare the convention used on that platform, if it's possible to - do so. - - If this is the case for your platform, please file a bug report - with information on how to identify your platform via the C - pre-processor and how to specify the same calling convention as the - platform's malloc() implementation. -*/ -#define XMLCALL -#endif -#endif /* not defined XMLCALL */ - - -#if !defined(XML_STATIC) && !defined(XMLIMPORT) -#ifndef XML_BUILDING_EXPAT -/* using Expat from an application */ - -#ifdef XML_USE_MSC_EXTENSIONS -#define XMLIMPORT __declspec(dllimport) -#endif - -#endif -#endif /* not defined XML_STATIC */ - -/* If we didn't define it above, define it away: */ -#ifndef XMLIMPORT -#define XMLIMPORT -#endif - - -#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef XML_UNICODE_WCHAR_T -#define XML_UNICODE -#endif - -struct XML_ParserStruct; -typedef struct XML_ParserStruct *XML_Parser; - -#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ -#ifdef XML_UNICODE_WCHAR_T -typedef wchar_t XML_Char; -typedef wchar_t XML_LChar; -#else -typedef unsigned short XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE_WCHAR_T */ -#else /* Information is UTF-8 encoded. */ -typedef char XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE */ - -/* Should this be defined using stdbool.h when C99 is available? */ -typedef unsigned char XML_Bool; -#define XML_TRUE ((XML_Bool) 1) -#define XML_FALSE ((XML_Bool) 0) - -/* The XML_Status enum gives the possible return values for several - API functions. The preprocessor #defines are included so this - stanza can be added to code that still needs to support older - versions of Expat 1.95.x: - - #ifndef XML_STATUS_OK - #define XML_STATUS_OK 1 - #define XML_STATUS_ERROR 0 - #endif - - Otherwise, the #define hackery is quite ugly and would have been - dropped. -*/ -enum XML_Status { - XML_STATUS_ERROR = 0, -#define XML_STATUS_ERROR XML_STATUS_ERROR - XML_STATUS_OK = 1 -#define XML_STATUS_OK XML_STATUS_OK -}; - -enum XML_Error { - XML_ERROR_NONE, - XML_ERROR_NO_MEMORY, - XML_ERROR_SYNTAX, - XML_ERROR_NO_ELEMENTS, - XML_ERROR_INVALID_TOKEN, - XML_ERROR_UNCLOSED_TOKEN, - XML_ERROR_PARTIAL_CHAR, - XML_ERROR_TAG_MISMATCH, - XML_ERROR_DUPLICATE_ATTRIBUTE, - XML_ERROR_JUNK_AFTER_DOC_ELEMENT, - XML_ERROR_PARAM_ENTITY_REF, - XML_ERROR_UNDEFINED_ENTITY, - XML_ERROR_RECURSIVE_ENTITY_REF, - XML_ERROR_ASYNC_ENTITY, - XML_ERROR_BAD_CHAR_REF, - XML_ERROR_BINARY_ENTITY_REF, - XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, - XML_ERROR_MISPLACED_XML_PI, - XML_ERROR_UNKNOWN_ENCODING, - XML_ERROR_INCORRECT_ENCODING, - XML_ERROR_UNCLOSED_CDATA_SECTION, - XML_ERROR_EXTERNAL_ENTITY_HANDLING, - XML_ERROR_NOT_STANDALONE, - XML_ERROR_UNEXPECTED_STATE, - XML_ERROR_ENTITY_DECLARED_IN_PE, - XML_ERROR_FEATURE_REQUIRES_XML_DTD, - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, - XML_ERROR_UNBOUND_PREFIX -}; - -enum XML_Content_Type { - XML_CTYPE_EMPTY = 1, - XML_CTYPE_ANY, - XML_CTYPE_MIXED, - XML_CTYPE_NAME, - XML_CTYPE_CHOICE, - XML_CTYPE_SEQ -}; - -enum XML_Content_Quant { - XML_CQUANT_NONE, - XML_CQUANT_OPT, - XML_CQUANT_REP, - XML_CQUANT_PLUS -}; - -/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be - XML_CQUANT_NONE, and the other fields will be zero or NULL. - If type == XML_CTYPE_MIXED, then quant will be NONE or REP and - numchildren will contain number of elements that may be mixed in - and children point to an array of XML_Content cells that will be - all of XML_CTYPE_NAME type with no quantification. - - If type == XML_CTYPE_NAME, then the name points to the name, and - the numchildren field will be zero and children will be NULL. The - quant fields indicates any quantifiers placed on the name. - - CHOICE and SEQ will have name NULL, the number of children in - numchildren and children will point, recursively, to an array - of XML_Content cells. - - The EMPTY, ANY, and MIXED types will only occur at top level. -*/ - -typedef struct XML_cp XML_Content; - -struct XML_cp { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - XML_Char * name; - unsigned int numchildren; - XML_Content * children; -}; - - -/* This is called for an element declaration. See above for - description of the model argument. It's the caller's responsibility - to free model when finished with it. -*/ -typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, - const XML_Char *name, - XML_Content *model); - -XMLPARSEAPI(void) -XML_SetElementDeclHandler(XML_Parser parser, - XML_ElementDeclHandler eldecl); - -/* The Attlist declaration handler is called for *each* attribute. So - a single Attlist declaration with multiple attributes declared will - generate multiple calls to this handler. The "default" parameter - may be NULL in the case of the "#IMPLIED" or "#REQUIRED" - keyword. The "isrequired" parameter will be true and the default - value will be NULL in the case of "#REQUIRED". If "isrequired" is - true and default is non-NULL, then this is a "#FIXED" default. -*/ -typedef void (XMLCALL *XML_AttlistDeclHandler) ( - void *userData, - const XML_Char *elname, - const XML_Char *attname, - const XML_Char *att_type, - const XML_Char *dflt, - int isrequired); - -XMLPARSEAPI(void) -XML_SetAttlistDeclHandler(XML_Parser parser, - XML_AttlistDeclHandler attdecl); - -/* The XML declaration handler is called for *both* XML declarations - and text declarations. The way to distinguish is that the version - parameter will be NULL for text declarations. The encoding - parameter may be NULL for XML declarations. The standalone - parameter will be -1, 0, or 1 indicating respectively that there - was no standalone parameter in the declaration, that it was given - as no, or that it was given as yes. -*/ -typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, - const XML_Char *version, - const XML_Char *encoding, - int standalone); - -XMLPARSEAPI(void) -XML_SetXmlDeclHandler(XML_Parser parser, - XML_XmlDeclHandler xmldecl); - - -typedef struct { - void *(XMLCALL *malloc_fcn)(size_t size); - void *(XMLCALL *realloc_fcn)(void *ptr, size_t size); - void (XMLCALL *free_fcn)(void *ptr); -} XML_Memory_Handling_Suite; - -/* Constructs a new parser; encoding is the encoding specified by the - external protocol or NULL if there is none specified. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate(const XML_Char *encoding); - -/* Constructs a new parser and namespace processor. Element type - names and attribute names that belong to a namespace will be - expanded; unprefixed attribute names are never expanded; unprefixed - element type names are expanded only if there is a default - namespace. The expanded name is the concatenation of the namespace - URI, the namespace separator character, and the local part of the - name. If the namespace separator is '\0' then the namespace URI - and the local part will be concatenated without any separator. - When a namespace is not declared, the name and prefix will be - passed through without expansion. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); - - -/* Constructs a new parser using the memory management suite referred to - by memsuite. If memsuite is NULL, then use the standard library memory - suite. If namespaceSeparator is non-NULL it creates a parser with - namespace processing as described above. The character pointed at - will serve as the namespace separator. - - All further memory operations used for the created parser will come from - the given suite. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate_MM(const XML_Char *encoding, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *namespaceSeparator); - -/* Prepare a parser object to be re-used. This is particularly - valuable when memory allocation overhead is disproportionatly high, - such as when a large number of small documnents need to be parsed. - All handlers are cleared from the parser, except for the - unknownEncodingHandler. The parser's external state is re-initialized - except for the values of ns and ns_triplets. - - Added in Expat 1.95.3. -*/ -XMLPARSEAPI(XML_Bool) -XML_ParserReset(XML_Parser parser, const XML_Char *encoding); - -/* atts is array of name/value pairs, terminated by 0; - names and values are 0 terminated. -*/ -typedef void (XMLCALL *XML_StartElementHandler) (void *userData, - const XML_Char *name, - const XML_Char **atts); - -typedef void (XMLCALL *XML_EndElementHandler) (void *userData, - const XML_Char *name); - - -/* s is not 0 terminated. */ -typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, - const XML_Char *s, - int len); - -/* target and data are 0 terminated */ -typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( - void *userData, - const XML_Char *target, - const XML_Char *data); - -/* data is 0 terminated */ -typedef void (XMLCALL *XML_CommentHandler) (void *userData, - const XML_Char *data); - -typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); -typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); - -/* This is called for any characters in the XML document for which - there is no applicable handler. This includes both characters that - are part of markup which is of a kind that is not reported - (comments, markup declarations), or characters that are part of a - construct which could be reported but for which no handler has been - supplied. The characters are passed exactly as they were in the XML - document except that they will be encoded in UTF-8 or UTF-16. - Line boundaries are not normalized. Note that a byte order mark - character is not passed to the default handler. There are no - guarantees about how characters are divided between calls to the - default handler: for example, a comment might be split between - multiple calls. -*/ -typedef void (XMLCALL *XML_DefaultHandler) (void *userData, - const XML_Char *s, - int len); - -/* This is called for the start of the DOCTYPE declaration, before - any DTD or internal subset is parsed. -*/ -typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( - void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset); - -/* This is called for the start of the DOCTYPE declaration when the - closing > is encountered, but after processing any external - subset. -*/ -typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); - -/* This is called for entity declarations. The is_parameter_entity - argument will be non-zero if the entity is a parameter entity, zero - otherwise. - - For internal entities (), value will - be non-NULL and systemId, publicID, and notationName will be NULL. - The value string is NOT nul-terminated; the length is provided in - the value_length argument. Since it is legal to have zero-length - values, do not use this argument to test for internal entities. - - For external entities, value will be NULL and systemId will be - non-NULL. The publicId argument will be NULL unless a public - identifier was provided. The notationName argument will have a - non-NULL value only for unparsed entity declarations. - - Note that is_parameter_entity can't be changed to XML_Bool, since - that would break binary compatibility. -*/ -typedef void (XMLCALL *XML_EntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity, - const XML_Char *value, - int value_length, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -XMLPARSEAPI(void) -XML_SetEntityDeclHandler(XML_Parser parser, - XML_EntityDeclHandler handler); - -/* OBSOLETE -- OBSOLETE -- OBSOLETE - This handler has been superceded by the EntityDeclHandler above. - It is provided here for backward compatibility. - - This is called for a declaration of an unparsed (NDATA) entity. - The base argument is whatever was set by XML_SetBase. The - entityName, systemId and notationName arguments will never be - NULL. The other arguments may be. -*/ -typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -/* This is called for a declaration of notation. The base argument is - whatever was set by XML_SetBase. The notationName will never be - NULL. The other arguments can be. -*/ -typedef void (XMLCALL *XML_NotationDeclHandler) ( - void *userData, - const XML_Char *notationName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* When namespace processing is enabled, these are called once for - each namespace declaration. The call to the start and end element - handlers occur between the calls to the start and end namespace - declaration handlers. For an xmlns attribute, prefix will be - NULL. For an xmlns="" attribute, uri will be NULL. -*/ -typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix, - const XML_Char *uri); - -typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix); - -/* This is called if the document is not standalone, that is, it has an - external subset or a reference to a parameter entity, but does not - have standalone="yes". If this handler returns XML_STATUS_ERROR, - then processing will not continue, and the parser will return a - XML_ERROR_NOT_STANDALONE error. - If parameter entity parsing is enabled, then in addition to the - conditions above this handler will only be called if the referenced - entity was actually read. -*/ -typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); - -/* This is called for a reference to an external parsed general - entity. The referenced entity is not automatically parsed. The - application can parse it immediately or later using - XML_ExternalEntityParserCreate. - - The parser argument is the parser parsing the entity containing the - reference; it can be passed as the parser argument to - XML_ExternalEntityParserCreate. The systemId argument is the - system identifier as specified in the entity declaration; it will - not be NULL. - - The base argument is the system identifier that should be used as - the base for resolving systemId if systemId was relative; this is - set by XML_SetBase; it may be NULL. - - The publicId argument is the public identifier as specified in the - entity declaration, or NULL if none was specified; the whitespace - in the public identifier will have been normalized as required by - the XML spec. - - The context argument specifies the parsing context in the format - expected by the context argument to XML_ExternalEntityParserCreate; - context is valid only until the handler returns, so if the - referenced entity is to be parsed later, it must be copied. - context is NULL only when the entity is a parameter entity. - - The handler should return XML_STATUS_ERROR if processing should not - continue because of a fatal error in the handling of the external - entity. In this case the calling parser will return an - XML_ERROR_EXTERNAL_ENTITY_HANDLING error. - - Note that unlike other handlers the first argument is the parser, - not userData. -*/ -typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( - XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* This is called in two situations: - 1) An entity reference is encountered for which no declaration - has been read *and* this is not an error. - 2) An internal entity reference is read, but not expanded, because - XML_SetDefaultHandler has been called. - Note: skipped parameter entities in declarations and skipped general - entities in attribute values cannot be reported, because - the event would be out of sync with the reporting of the - declarations or attribute values -*/ -typedef void (XMLCALL *XML_SkippedEntityHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity); - -/* This structure is filled in by the XML_UnknownEncodingHandler to - provide information to the parser about encodings that are unknown - to the parser. - - The map[b] member gives information about byte sequences whose - first byte is b. - - If map[b] is c where c is >= 0, then b by itself encodes the - Unicode scalar value c. - - If map[b] is -1, then the byte sequence is malformed. - - If map[b] is -n, where n >= 2, then b is the first byte of an - n-byte sequence that encodes a single Unicode scalar value. - - The data member will be passed as the first argument to the convert - function. - - The convert function is used to convert multibyte sequences; s will - point to a n-byte sequence where map[(unsigned char)*s] == -n. The - convert function must return the Unicode scalar value represented - by this byte sequence or -1 if the byte sequence is malformed. - - The convert function may be NULL if the encoding is a single-byte - encoding, that is if map[b] >= -1 for all bytes b. - - When the parser is finished with the encoding, then if release is - not NULL, it will call release passing it the data member; once - release has been called, the convert function will not be called - again. - - Expat places certain restrictions on the encodings that are supported - using this mechanism. - - 1. Every ASCII character that can appear in a well-formed XML document, - other than the characters - - $@\^`{}~ - - must be represented by a single byte, and that byte must be the - same byte that represents that character in ASCII. - - 2. No character may require more than 4 bytes to encode. - - 3. All characters encoded must have Unicode scalar values <= - 0xFFFF, (i.e., characters that would be encoded by surrogates in - UTF-16 are not allowed). Note that this restriction doesn't - apply to the built-in support for UTF-8 and UTF-16. - - 4. No Unicode character may be encoded by more than one distinct - sequence of bytes. -*/ -typedef struct { - int map[256]; - void *data; - int (XMLCALL *convert)(void *data, const char *s); - void (XMLCALL *release)(void *data); -} XML_Encoding; - -/* This is called for an encoding that is unknown to the parser. - - The encodingHandlerData argument is that which was passed as the - second argument to XML_SetUnknownEncodingHandler. - - The name argument gives the name of the encoding as specified in - the encoding declaration. - - If the callback can provide information about the encoding, it must - fill in the XML_Encoding structure, and return XML_STATUS_OK. - Otherwise it must return XML_STATUS_ERROR. - - If info does not describe a suitable encoding, then the parser will - return an XML_UNKNOWN_ENCODING error. -*/ -typedef int (XMLCALL *XML_UnknownEncodingHandler) ( - void *encodingHandlerData, - const XML_Char *name, - XML_Encoding *info); - -XMLPARSEAPI(void) -XML_SetElementHandler(XML_Parser parser, - XML_StartElementHandler start, - XML_EndElementHandler end); - -XMLPARSEAPI(void) -XML_SetStartElementHandler(XML_Parser, XML_StartElementHandler); - -XMLPARSEAPI(void) -XML_SetEndElementHandler(XML_Parser, XML_EndElementHandler); - -XMLPARSEAPI(void) -XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler); - -XMLPARSEAPI(void) -XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler); -XMLPARSEAPI(void) -XML_SetCommentHandler(XML_Parser parser, - XML_CommentHandler handler); - -XMLPARSEAPI(void) -XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end); - -XMLPARSEAPI(void) -XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start); - -XMLPARSEAPI(void) -XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end); - -/* This sets the default handler and also inhibits expansion of - internal entities. These entity references will be passed to the - default handler, or to the skipped entity handler, if one is set. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandler(XML_Parser parser, - XML_DefaultHandler handler); - -/* This sets the default handler but does not inhibit expansion of - internal entities. The entity reference will not be passed to the - default handler. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandlerExpand(XML_Parser parser, - XML_DefaultHandler handler); - -XMLPARSEAPI(void) -XML_SetDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndDoctypeDeclHandler(XML_Parser parser, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNotationDeclHandler(XML_Parser parser, - XML_NotationDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler); - -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler); - -/* If a non-NULL value for arg is specified here, then it will be - passed as the first argument to the external entity ref handler - instead of the parser object. -*/ -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg); - -XMLPARSEAPI(void) -XML_SetSkippedEntityHandler(XML_Parser parser, - XML_SkippedEntityHandler handler); - -XMLPARSEAPI(void) -XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, - void *encodingHandlerData); - -/* This can be called within a handler for a start element, end - element, processing instruction or character data. It causes the - corresponding markup to be passed to the default handler. -*/ -XMLPARSEAPI(void) -XML_DefaultCurrent(XML_Parser parser); - -/* If do_nst is non-zero, and namespace processing is in effect, and - a name has a prefix (i.e. an explicit namespace qualifier) then - that name is returned as a triplet in a single string separated by - the separator character specified when the parser was created: URI - + sep + local_name + sep + prefix. - - If do_nst is zero, then namespace information is returned in the - default manner (URI + sep + local_name) whether or not the name - has a prefix. - - Note: Calling XML_SetReturnNSTriplet after XML_Parse or - XML_ParseBuffer has no effect. -*/ - -XMLPARSEAPI(void) -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); - -/* This value is passed as the userData argument to callbacks. */ -XMLPARSEAPI(void) -XML_SetUserData(XML_Parser parser, void *userData); - -/* Returns the last value set by XML_SetUserData or NULL. */ -#define XML_GetUserData(parser) (*(void **)(parser)) - -/* This is equivalent to supplying an encoding argument to - XML_ParserCreate. On success XML_SetEncoding returns non-zero, - zero otherwise. - Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer - has no effect and returns XML_STATUS_ERROR. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); - -/* If this function is called, then the parser will be passed as the - first argument to callbacks instead of userData. The userData will - still be accessible using XML_GetUserData. -*/ -XMLPARSEAPI(void) -XML_UseParserAsHandlerArg(XML_Parser parser); - -/* If useDTD == XML_TRUE is passed to this function, then the parser - will assume that there is an external subset, even if none is - specified in the document. In such a case the parser will call the - externalEntityRefHandler with a value of NULL for the systemId - argument (the publicId and context arguments will be NULL as well). - Note: If this function is called, then this must be done before - the first call to XML_Parse or XML_ParseBuffer, since it will - have no effect after that. Returns - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. - Note: If the document does not have a DOCTYPE declaration at all, - then startDoctypeDeclHandler and endDoctypeDeclHandler will not - be called, despite an external subset being parsed. - Note: If XML_DTD is not defined when Expat is compiled, returns - XML_ERROR_FEATURE_REQUIRES_XML_DTD. -*/ -XMLPARSEAPI(enum XML_Error) -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); - - -/* Sets the base to be used for resolving relative URIs in system - identifiers in declarations. Resolving relative identifiers is - left to the application: this value will be passed through as the - base argument to the XML_ExternalEntityRefHandler, - XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base - argument will be copied. Returns XML_STATUS_ERROR if out of memory, - XML_STATUS_OK otherwise. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetBase(XML_Parser parser, const XML_Char *base); - -XMLPARSEAPI(const XML_Char *) -XML_GetBase(XML_Parser parser); - -/* Returns the number of the attribute/value pairs passed in last call - to the XML_StartElementHandler that were specified in the start-tag - rather than defaulted. Each attribute/value pair counts as 2; thus - this correspondds to an index into the atts array passed to the - XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetSpecifiedAttributeCount(XML_Parser parser); - -/* Returns the index of the ID attribute passed in the last call to - XML_StartElementHandler, or -1 if there is no ID attribute. Each - attribute/value pair counts as 2; thus this correspondds to an - index into the atts array passed to the XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetIdAttributeIndex(XML_Parser parser); - -/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is - detected. The last call to XML_Parse must have isFinal true; len - may be zero for this call (or any other). - - Though the return values for these functions has always been - described as a Boolean value, the implementation, at least for the - 1.95.x series, has always returned exactly one of the XML_Status - values. -*/ -XMLPARSEAPI(enum XML_Status) -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); - -XMLPARSEAPI(void *) -XML_GetBuffer(XML_Parser parser, int len); - -XMLPARSEAPI(enum XML_Status) -XML_ParseBuffer(XML_Parser parser, int len, int isFinal); - -/* Creates an XML_Parser object that can parse an external general - entity; context is a '\0'-terminated string specifying the parse - context; encoding is a '\0'-terminated string giving the name of - the externally specified encoding, or NULL if there is no - externally specified encoding. The context string consists of a - sequence of tokens separated by formfeeds (\f); a token consisting - of a name specifies that the general entity of the name is open; a - token of the form prefix=uri specifies the namespace for a - particular prefix; a token of the form =uri specifies the default - namespace. This can be called at any point after the first call to - an ExternalEntityRefHandler so longer as the parser has not yet - been freed. The new parser is completely independent and may - safely be used in a separate thread. The handlers and userData are - initialized from the parser argument. Returns NULL if out of memory. - Otherwise returns a new XML_Parser object. -*/ -XMLPARSEAPI(XML_Parser) -XML_ExternalEntityParserCreate(XML_Parser parser, - const XML_Char *context, - const XML_Char *encoding); - -enum XML_ParamEntityParsing { - XML_PARAM_ENTITY_PARSING_NEVER, - XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, - XML_PARAM_ENTITY_PARSING_ALWAYS -}; - -/* Controls parsing of parameter entities (including the external DTD - subset). If parsing of parameter entities is enabled, then - references to external parameter entities (including the external - DTD subset) will be passed to the handler set with - XML_SetExternalEntityRefHandler. The context passed will be 0. - - Unlike external general entities, external parameter entities can - only be parsed synchronously. If the external parameter entity is - to be parsed, it must be parsed during the call to the external - entity ref handler: the complete sequence of - XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and - XML_ParserFree calls must be made during this call. After - XML_ExternalEntityParserCreate has been called to create the parser - for the external parameter entity (context must be 0 for this - call), it is illegal to make any calls on the old parser until - XML_ParserFree has been called on the newly created parser. - If the library has been compiled without support for parameter - entity parsing (ie without XML_DTD being defined), then - XML_SetParamEntityParsing will return 0 if parsing of parameter - entities is requested; otherwise it will return non-zero. - Note: If XML_SetParamEntityParsing is called after XML_Parse or - XML_ParseBuffer, then it has no effect and will always return 0. -*/ -XMLPARSEAPI(int) -XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing parsing); - -/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then - XML_GetErrorCode returns information about the error. -*/ -XMLPARSEAPI(enum XML_Error) -XML_GetErrorCode(XML_Parser parser); - -/* These functions return information about the current parse - location. They may be called from any callback called to report - some parse event; in this case the location is the location of the - first of the sequence of characters that generated the event. When - called from callbacks generated by declarations in the document - prologue, the location identified isn't as neatly defined, but will - be within the relevant markup. When called outside of the callback - functions, the position indicated will be just past the last parse - event (regardless of whether there was an associated callback). - - They may also be called after returning from a call to XML_Parse - or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then - the location is the location of the character at which the error - was detected; otherwise the location is the location of the last - parse event, as described above. -*/ -XMLPARSEAPI(int) XML_GetCurrentLineNumber(XML_Parser parser); -XMLPARSEAPI(int) XML_GetCurrentColumnNumber(XML_Parser parser); -XMLPARSEAPI(long) XML_GetCurrentByteIndex(XML_Parser parser); - -/* Return the number of bytes in the current event. - Returns 0 if the event is in an internal entity. -*/ -XMLPARSEAPI(int) -XML_GetCurrentByteCount(XML_Parser parser); - -/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets - the integer pointed to by offset to the offset within this buffer - of the current parse position, and sets the integer pointed to by size - to the size of this buffer (the number of input bytes). Otherwise - returns a NULL pointer. Also returns a NULL pointer if a parse isn't - active. - - NOTE: The character pointer returned should not be used outside - the handler that makes the call. -*/ -XMLPARSEAPI(const char *) -XML_GetInputContext(XML_Parser parser, - int *offset, - int *size); - -/* For backwards compatibility with previous versions. */ -#define XML_GetErrorLineNumber XML_GetCurrentLineNumber -#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber -#define XML_GetErrorByteIndex XML_GetCurrentByteIndex - -/* Frees the content model passed to the element declaration handler */ -XMLPARSEAPI(void) -XML_FreeContentModel(XML_Parser parser, XML_Content *model); - -/* Exposing the memory handling functions used in Expat */ -XMLPARSEAPI(void *) -XML_MemMalloc(XML_Parser parser, size_t size); - -XMLPARSEAPI(void *) -XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); - -XMLPARSEAPI(void) -XML_MemFree(XML_Parser parser, void *ptr); - -/* Frees memory used by the parser. */ -XMLPARSEAPI(void) -XML_ParserFree(XML_Parser parser); - -/* Returns a string describing the error. */ -XMLPARSEAPI(const XML_LChar *) -XML_ErrorString(enum XML_Error code); - -/* Return a string containing the version number of this expat */ -XMLPARSEAPI(const XML_LChar *) -XML_ExpatVersion(void); - -typedef struct { - int major; - int minor; - int micro; -} XML_Expat_Version; - -/* Return an XML_Expat_Version structure containing numeric version - number information for this version of expat. -*/ -XMLPARSEAPI(XML_Expat_Version) -XML_ExpatVersionInfo(void); - -/* Added in Expat 1.95.5. */ -enum XML_FeatureEnum { - XML_FEATURE_END = 0, - XML_FEATURE_UNICODE, - XML_FEATURE_UNICODE_WCHAR_T, - XML_FEATURE_DTD, - XML_FEATURE_CONTEXT_BYTES, - XML_FEATURE_MIN_SIZE, - XML_FEATURE_SIZEOF_XML_CHAR, - XML_FEATURE_SIZEOF_XML_LCHAR - /* Additional features must be added to the end of this enum. */ -}; - -typedef struct { - enum XML_FeatureEnum feature; - const XML_LChar *name; - long int value; -} XML_Feature; - -XMLPARSEAPI(const XML_Feature *) -XML_GetFeatureList(void); - - -/* Expat follows the GNU/Linux convention of odd number minor version for - beta/development releases and even number minor version for stable - releases. Micro is bumped with each release, and set to 0 with each - change to major or minor version. -*/ -#define XML_MAJOR_VERSION 1 -#define XML_MINOR_VERSION 95 -#define XML_MICRO_VERSION 7 - -#ifdef __cplusplus -} -#endif - -#endif /* not XmlParse_INCLUDED */ diff --git a/gpsbabel/msvc/Expat/libexpat.dll b/gpsbabel/msvc/Expat/libexpat.dll deleted file mode 100755 index 4c925de3579d7bc74ea0c85f4d096d0070e09da1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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

o`}M#~TH!R_w*#*Mmjd$$ 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 Gf%{*geonRk diff --git a/gpsbabel/msvc/Expatw/expat.h b/gpsbabel/msvc/Expatw/expat.h deleted file mode 100644 index c6a4b3b6c..000000000 --- a/gpsbabel/msvc/Expatw/expat.h +++ /dev/null @@ -1,1013 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - See the file COPYING for copying permission. -*/ - -#ifndef Expat_INCLUDED -#define Expat_INCLUDED 1 - -#ifdef __VMS -/* 0 1 2 3 0 1 2 3 - 1234567890123456789012345678901 1234567890123456789012345678901 */ -#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler -#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler -#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler -#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg -#endif - -#include -#include "expat_external.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct XML_ParserStruct; -typedef struct XML_ParserStruct *XML_Parser; - -/* Should this be defined using stdbool.h when C99 is available? */ -typedef unsigned char XML_Bool; -#define XML_TRUE ((XML_Bool) 1) -#define XML_FALSE ((XML_Bool) 0) - -/* The XML_Status enum gives the possible return values for several - API functions. The preprocessor #defines are included so this - stanza can be added to code that still needs to support older - versions of Expat 1.95.x: - - #ifndef XML_STATUS_OK - #define XML_STATUS_OK 1 - #define XML_STATUS_ERROR 0 - #endif - - Otherwise, the #define hackery is quite ugly and would have been - dropped. -*/ -enum XML_Status { - XML_STATUS_ERROR = 0, -#define XML_STATUS_ERROR XML_STATUS_ERROR - XML_STATUS_OK = 1, -#define XML_STATUS_OK XML_STATUS_OK - XML_STATUS_SUSPENDED = 2 -#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED -}; - -enum XML_Error { - XML_ERROR_NONE, - XML_ERROR_NO_MEMORY, - XML_ERROR_SYNTAX, - XML_ERROR_NO_ELEMENTS, - XML_ERROR_INVALID_TOKEN, - XML_ERROR_UNCLOSED_TOKEN, - XML_ERROR_PARTIAL_CHAR, - XML_ERROR_TAG_MISMATCH, - XML_ERROR_DUPLICATE_ATTRIBUTE, - XML_ERROR_JUNK_AFTER_DOC_ELEMENT, - XML_ERROR_PARAM_ENTITY_REF, - XML_ERROR_UNDEFINED_ENTITY, - XML_ERROR_RECURSIVE_ENTITY_REF, - XML_ERROR_ASYNC_ENTITY, - XML_ERROR_BAD_CHAR_REF, - XML_ERROR_BINARY_ENTITY_REF, - XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, - XML_ERROR_MISPLACED_XML_PI, - XML_ERROR_UNKNOWN_ENCODING, - XML_ERROR_INCORRECT_ENCODING, - XML_ERROR_UNCLOSED_CDATA_SECTION, - XML_ERROR_EXTERNAL_ENTITY_HANDLING, - XML_ERROR_NOT_STANDALONE, - XML_ERROR_UNEXPECTED_STATE, - XML_ERROR_ENTITY_DECLARED_IN_PE, - XML_ERROR_FEATURE_REQUIRES_XML_DTD, - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, - /* Added in 1.95.7. */ - XML_ERROR_UNBOUND_PREFIX, - /* Added in 1.95.8. */ - XML_ERROR_UNDECLARING_PREFIX, - XML_ERROR_INCOMPLETE_PE, - XML_ERROR_XML_DECL, - XML_ERROR_TEXT_DECL, - XML_ERROR_PUBLICID, - XML_ERROR_SUSPENDED, - XML_ERROR_NOT_SUSPENDED, - XML_ERROR_ABORTED, - XML_ERROR_FINISHED, - XML_ERROR_SUSPEND_PE, - /* Added in 2.0. */ - XML_ERROR_RESERVED_PREFIX_XML, - XML_ERROR_RESERVED_PREFIX_XMLNS, - XML_ERROR_RESERVED_NAMESPACE_URI -}; - -enum XML_Content_Type { - XML_CTYPE_EMPTY = 1, - XML_CTYPE_ANY, - XML_CTYPE_MIXED, - XML_CTYPE_NAME, - XML_CTYPE_CHOICE, - XML_CTYPE_SEQ -}; - -enum XML_Content_Quant { - XML_CQUANT_NONE, - XML_CQUANT_OPT, - XML_CQUANT_REP, - XML_CQUANT_PLUS -}; - -/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be - XML_CQUANT_NONE, and the other fields will be zero or NULL. - If type == XML_CTYPE_MIXED, then quant will be NONE or REP and - numchildren will contain number of elements that may be mixed in - and children point to an array of XML_Content cells that will be - all of XML_CTYPE_NAME type with no quantification. - - If type == XML_CTYPE_NAME, then the name points to the name, and - the numchildren field will be zero and children will be NULL. The - quant fields indicates any quantifiers placed on the name. - - CHOICE and SEQ will have name NULL, the number of children in - numchildren and children will point, recursively, to an array - of XML_Content cells. - - The EMPTY, ANY, and MIXED types will only occur at top level. -*/ - -typedef struct XML_cp XML_Content; - -struct XML_cp { - enum XML_Content_Type type; - enum XML_Content_Quant quant; - XML_Char * name; - unsigned int numchildren; - XML_Content * children; -}; - - -/* This is called for an element declaration. See above for - description of the model argument. It's the caller's responsibility - to free model when finished with it. -*/ -typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, - const XML_Char *name, - XML_Content *model); - -XMLPARSEAPI(void) -XML_SetElementDeclHandler(XML_Parser parser, - XML_ElementDeclHandler eldecl); - -/* The Attlist declaration handler is called for *each* attribute. So - a single Attlist declaration with multiple attributes declared will - generate multiple calls to this handler. The "default" parameter - may be NULL in the case of the "#IMPLIED" or "#REQUIRED" - keyword. The "isrequired" parameter will be true and the default - value will be NULL in the case of "#REQUIRED". If "isrequired" is - true and default is non-NULL, then this is a "#FIXED" default. -*/ -typedef void (XMLCALL *XML_AttlistDeclHandler) ( - void *userData, - const XML_Char *elname, - const XML_Char *attname, - const XML_Char *att_type, - const XML_Char *dflt, - int isrequired); - -XMLPARSEAPI(void) -XML_SetAttlistDeclHandler(XML_Parser parser, - XML_AttlistDeclHandler attdecl); - -/* The XML declaration handler is called for *both* XML declarations - and text declarations. The way to distinguish is that the version - parameter will be NULL for text declarations. The encoding - parameter may be NULL for XML declarations. The standalone - parameter will be -1, 0, or 1 indicating respectively that there - was no standalone parameter in the declaration, that it was given - as no, or that it was given as yes. -*/ -typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, - const XML_Char *version, - const XML_Char *encoding, - int standalone); - -XMLPARSEAPI(void) -XML_SetXmlDeclHandler(XML_Parser parser, - XML_XmlDeclHandler xmldecl); - - -typedef struct { - void *(*malloc_fcn)(size_t size); - void *(*realloc_fcn)(void *ptr, size_t size); - void (*free_fcn)(void *ptr); -} XML_Memory_Handling_Suite; - -/* Constructs a new parser; encoding is the encoding specified by the - external protocol or NULL if there is none specified. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate(const XML_Char *encoding); - -/* Constructs a new parser and namespace processor. Element type - names and attribute names that belong to a namespace will be - expanded; unprefixed attribute names are never expanded; unprefixed - element type names are expanded only if there is a default - namespace. The expanded name is the concatenation of the namespace - URI, the namespace separator character, and the local part of the - name. If the namespace separator is '\0' then the namespace URI - and the local part will be concatenated without any separator. - It is a programming error to use the separator '\0' with namespace - triplets (see XML_SetReturnNSTriplet). -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); - - -/* Constructs a new parser using the memory management suite referred to - by memsuite. If memsuite is NULL, then use the standard library memory - suite. If namespaceSeparator is non-NULL it creates a parser with - namespace processing as described above. The character pointed at - will serve as the namespace separator. - - All further memory operations used for the created parser will come from - the given suite. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate_MM(const XML_Char *encoding, - const XML_Memory_Handling_Suite *memsuite, - const XML_Char *namespaceSeparator); - -/* Prepare a parser object to be re-used. This is particularly - valuable when memory allocation overhead is disproportionatly high, - such as when a large number of small documnents need to be parsed. - All handlers are cleared from the parser, except for the - unknownEncodingHandler. The parser's external state is re-initialized - except for the values of ns and ns_triplets. - - Added in Expat 1.95.3. -*/ -XMLPARSEAPI(XML_Bool) -XML_ParserReset(XML_Parser parser, const XML_Char *encoding); - -/* atts is array of name/value pairs, terminated by 0; - names and values are 0 terminated. -*/ -typedef void (XMLCALL *XML_StartElementHandler) (void *userData, - const XML_Char *name, - const XML_Char **atts); - -typedef void (XMLCALL *XML_EndElementHandler) (void *userData, - const XML_Char *name); - - -/* s is not 0 terminated. */ -typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, - const XML_Char *s, - int len); - -/* target and data are 0 terminated */ -typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( - void *userData, - const XML_Char *target, - const XML_Char *data); - -/* data is 0 terminated */ -typedef void (XMLCALL *XML_CommentHandler) (void *userData, - const XML_Char *data); - -typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); -typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); - -/* This is called for any characters in the XML document for which - there is no applicable handler. This includes both characters that - are part of markup which is of a kind that is not reported - (comments, markup declarations), or characters that are part of a - construct which could be reported but for which no handler has been - supplied. The characters are passed exactly as they were in the XML - document except that they will be encoded in UTF-8 or UTF-16. - Line boundaries are not normalized. Note that a byte order mark - character is not passed to the default handler. There are no - guarantees about how characters are divided between calls to the - default handler: for example, a comment might be split between - multiple calls. -*/ -typedef void (XMLCALL *XML_DefaultHandler) (void *userData, - const XML_Char *s, - int len); - -/* This is called for the start of the DOCTYPE declaration, before - any DTD or internal subset is parsed. -*/ -typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( - void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset); - -/* This is called for the start of the DOCTYPE declaration when the - closing > is encountered, but after processing any external - subset. -*/ -typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); - -/* This is called for entity declarations. The is_parameter_entity - argument will be non-zero if the entity is a parameter entity, zero - otherwise. - - For internal entities (), value will - be non-NULL and systemId, publicID, and notationName will be NULL. - The value string is NOT nul-terminated; the length is provided in - the value_length argument. Since it is legal to have zero-length - values, do not use this argument to test for internal entities. - - For external entities, value will be NULL and systemId will be - non-NULL. The publicId argument will be NULL unless a public - identifier was provided. The notationName argument will have a - non-NULL value only for unparsed entity declarations. - - Note that is_parameter_entity can't be changed to XML_Bool, since - that would break binary compatibility. -*/ -typedef void (XMLCALL *XML_EntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity, - const XML_Char *value, - int value_length, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -XMLPARSEAPI(void) -XML_SetEntityDeclHandler(XML_Parser parser, - XML_EntityDeclHandler handler); - -/* OBSOLETE -- OBSOLETE -- OBSOLETE - This handler has been superceded by the EntityDeclHandler above. - It is provided here for backward compatibility. - - This is called for a declaration of an unparsed (NDATA) entity. - The base argument is whatever was set by XML_SetBase. The - entityName, systemId and notationName arguments will never be - NULL. The other arguments may be. -*/ -typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( - void *userData, - const XML_Char *entityName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId, - const XML_Char *notationName); - -/* This is called for a declaration of notation. The base argument is - whatever was set by XML_SetBase. The notationName will never be - NULL. The other arguments can be. -*/ -typedef void (XMLCALL *XML_NotationDeclHandler) ( - void *userData, - const XML_Char *notationName, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* When namespace processing is enabled, these are called once for - each namespace declaration. The call to the start and end element - handlers occur between the calls to the start and end namespace - declaration handlers. For an xmlns attribute, prefix will be - NULL. For an xmlns="" attribute, uri will be NULL. -*/ -typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix, - const XML_Char *uri); - -typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( - void *userData, - const XML_Char *prefix); - -/* This is called if the document is not standalone, that is, it has an - external subset or a reference to a parameter entity, but does not - have standalone="yes". If this handler returns XML_STATUS_ERROR, - then processing will not continue, and the parser will return a - XML_ERROR_NOT_STANDALONE error. - If parameter entity parsing is enabled, then in addition to the - conditions above this handler will only be called if the referenced - entity was actually read. -*/ -typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); - -/* This is called for a reference to an external parsed general - entity. The referenced entity is not automatically parsed. The - application can parse it immediately or later using - XML_ExternalEntityParserCreate. - - The parser argument is the parser parsing the entity containing the - reference; it can be passed as the parser argument to - XML_ExternalEntityParserCreate. The systemId argument is the - system identifier as specified in the entity declaration; it will - not be NULL. - - The base argument is the system identifier that should be used as - the base for resolving systemId if systemId was relative; this is - set by XML_SetBase; it may be NULL. - - The publicId argument is the public identifier as specified in the - entity declaration, or NULL if none was specified; the whitespace - in the public identifier will have been normalized as required by - the XML spec. - - The context argument specifies the parsing context in the format - expected by the context argument to XML_ExternalEntityParserCreate; - context is valid only until the handler returns, so if the - referenced entity is to be parsed later, it must be copied. - context is NULL only when the entity is a parameter entity. - - The handler should return XML_STATUS_ERROR if processing should not - continue because of a fatal error in the handling of the external - entity. In this case the calling parser will return an - XML_ERROR_EXTERNAL_ENTITY_HANDLING error. - - Note that unlike other handlers the first argument is the parser, - not userData. -*/ -typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( - XML_Parser parser, - const XML_Char *context, - const XML_Char *base, - const XML_Char *systemId, - const XML_Char *publicId); - -/* This is called in two situations: - 1) An entity reference is encountered for which no declaration - has been read *and* this is not an error. - 2) An internal entity reference is read, but not expanded, because - XML_SetDefaultHandler has been called. - Note: skipped parameter entities in declarations and skipped general - entities in attribute values cannot be reported, because - the event would be out of sync with the reporting of the - declarations or attribute values -*/ -typedef void (XMLCALL *XML_SkippedEntityHandler) ( - void *userData, - const XML_Char *entityName, - int is_parameter_entity); - -/* This structure is filled in by the XML_UnknownEncodingHandler to - provide information to the parser about encodings that are unknown - to the parser. - - The map[b] member gives information about byte sequences whose - first byte is b. - - If map[b] is c where c is >= 0, then b by itself encodes the - Unicode scalar value c. - - If map[b] is -1, then the byte sequence is malformed. - - If map[b] is -n, where n >= 2, then b is the first byte of an - n-byte sequence that encodes a single Unicode scalar value. - - The data member will be passed as the first argument to the convert - function. - - The convert function is used to convert multibyte sequences; s will - point to a n-byte sequence where map[(unsigned char)*s] == -n. The - convert function must return the Unicode scalar value represented - by this byte sequence or -1 if the byte sequence is malformed. - - The convert function may be NULL if the encoding is a single-byte - encoding, that is if map[b] >= -1 for all bytes b. - - When the parser is finished with the encoding, then if release is - not NULL, it will call release passing it the data member; once - release has been called, the convert function will not be called - again. - - Expat places certain restrictions on the encodings that are supported - using this mechanism. - - 1. Every ASCII character that can appear in a well-formed XML document, - other than the characters - - $@\^`{}~ - - must be represented by a single byte, and that byte must be the - same byte that represents that character in ASCII. - - 2. No character may require more than 4 bytes to encode. - - 3. All characters encoded must have Unicode scalar values <= - 0xFFFF, (i.e., characters that would be encoded by surrogates in - UTF-16 are not allowed). Note that this restriction doesn't - apply to the built-in support for UTF-8 and UTF-16. - - 4. No Unicode character may be encoded by more than one distinct - sequence of bytes. -*/ -typedef struct { - int map[256]; - void *data; - int (XMLCALL *convert)(void *data, const char *s); - void (XMLCALL *release)(void *data); -} XML_Encoding; - -/* This is called for an encoding that is unknown to the parser. - - The encodingHandlerData argument is that which was passed as the - second argument to XML_SetUnknownEncodingHandler. - - The name argument gives the name of the encoding as specified in - the encoding declaration. - - If the callback can provide information about the encoding, it must - fill in the XML_Encoding structure, and return XML_STATUS_OK. - Otherwise it must return XML_STATUS_ERROR. - - If info does not describe a suitable encoding, then the parser will - return an XML_UNKNOWN_ENCODING error. -*/ -typedef int (XMLCALL *XML_UnknownEncodingHandler) ( - void *encodingHandlerData, - const XML_Char *name, - XML_Encoding *info); - -XMLPARSEAPI(void) -XML_SetElementHandler(XML_Parser parser, - XML_StartElementHandler start, - XML_EndElementHandler end); - -XMLPARSEAPI(void) -XML_SetStartElementHandler(XML_Parser parser, - XML_StartElementHandler handler); - -XMLPARSEAPI(void) -XML_SetEndElementHandler(XML_Parser parser, - XML_EndElementHandler handler); - -XMLPARSEAPI(void) -XML_SetCharacterDataHandler(XML_Parser parser, - XML_CharacterDataHandler handler); - -XMLPARSEAPI(void) -XML_SetProcessingInstructionHandler(XML_Parser parser, - XML_ProcessingInstructionHandler handler); -XMLPARSEAPI(void) -XML_SetCommentHandler(XML_Parser parser, - XML_CommentHandler handler); - -XMLPARSEAPI(void) -XML_SetCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start, - XML_EndCdataSectionHandler end); - -XMLPARSEAPI(void) -XML_SetStartCdataSectionHandler(XML_Parser parser, - XML_StartCdataSectionHandler start); - -XMLPARSEAPI(void) -XML_SetEndCdataSectionHandler(XML_Parser parser, - XML_EndCdataSectionHandler end); - -/* This sets the default handler and also inhibits expansion of - internal entities. These entity references will be passed to the - default handler, or to the skipped entity handler, if one is set. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandler(XML_Parser parser, - XML_DefaultHandler handler); - -/* This sets the default handler but does not inhibit expansion of - internal entities. The entity reference will not be passed to the - default handler. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandlerExpand(XML_Parser parser, - XML_DefaultHandler handler); - -XMLPARSEAPI(void) -XML_SetDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartDoctypeDeclHandler(XML_Parser parser, - XML_StartDoctypeDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndDoctypeDeclHandler(XML_Parser parser, - XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, - XML_UnparsedEntityDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNotationDeclHandler(XML_Parser parser, - XML_NotationDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartNamespaceDeclHandler(XML_Parser parser, - XML_StartNamespaceDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndNamespaceDeclHandler(XML_Parser parser, - XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetNotStandaloneHandler(XML_Parser parser, - XML_NotStandaloneHandler handler); - -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandler(XML_Parser parser, - XML_ExternalEntityRefHandler handler); - -/* If a non-NULL value for arg is specified here, then it will be - passed as the first argument to the external entity ref handler - instead of the parser object. -*/ -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandlerArg(XML_Parser parser, - void *arg); - -XMLPARSEAPI(void) -XML_SetSkippedEntityHandler(XML_Parser parser, - XML_SkippedEntityHandler handler); - -XMLPARSEAPI(void) -XML_SetUnknownEncodingHandler(XML_Parser parser, - XML_UnknownEncodingHandler handler, - void *encodingHandlerData); - -/* This can be called within a handler for a start element, end - element, processing instruction or character data. It causes the - corresponding markup to be passed to the default handler. -*/ -XMLPARSEAPI(void) -XML_DefaultCurrent(XML_Parser parser); - -/* If do_nst is non-zero, and namespace processing is in effect, and - a name has a prefix (i.e. an explicit namespace qualifier) then - that name is returned as a triplet in a single string separated by - the separator character specified when the parser was created: URI - + sep + local_name + sep + prefix. - - If do_nst is zero, then namespace information is returned in the - default manner (URI + sep + local_name) whether or not the name - has a prefix. - - Note: Calling XML_SetReturnNSTriplet after XML_Parse or - XML_ParseBuffer has no effect. -*/ - -XMLPARSEAPI(void) -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); - -/* This value is passed as the userData argument to callbacks. */ -XMLPARSEAPI(void) -XML_SetUserData(XML_Parser parser, void *userData); - -/* Returns the last value set by XML_SetUserData or NULL. */ -#define XML_GetUserData(parser) (*(void **)(parser)) - -/* This is equivalent to supplying an encoding argument to - XML_ParserCreate. On success XML_SetEncoding returns non-zero, - zero otherwise. - Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer - has no effect and returns XML_STATUS_ERROR. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); - -/* If this function is called, then the parser will be passed as the - first argument to callbacks instead of userData. The userData will - still be accessible using XML_GetUserData. -*/ -XMLPARSEAPI(void) -XML_UseParserAsHandlerArg(XML_Parser parser); - -/* If useDTD == XML_TRUE is passed to this function, then the parser - will assume that there is an external subset, even if none is - specified in the document. In such a case the parser will call the - externalEntityRefHandler with a value of NULL for the systemId - argument (the publicId and context arguments will be NULL as well). - Note: For the purpose of checking WFC: Entity Declared, passing - useDTD == XML_TRUE will make the parser behave as if the document - had a DTD with an external subset. - Note: If this function is called, then this must be done before - the first call to XML_Parse or XML_ParseBuffer, since it will - have no effect after that. Returns - XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. - Note: If the document does not have a DOCTYPE declaration at all, - then startDoctypeDeclHandler and endDoctypeDeclHandler will not - be called, despite an external subset being parsed. - Note: If XML_DTD is not defined when Expat is compiled, returns - XML_ERROR_FEATURE_REQUIRES_XML_DTD. -*/ -XMLPARSEAPI(enum XML_Error) -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); - - -/* Sets the base to be used for resolving relative URIs in system - identifiers in declarations. Resolving relative identifiers is - left to the application: this value will be passed through as the - base argument to the XML_ExternalEntityRefHandler, - XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base - argument will be copied. Returns XML_STATUS_ERROR if out of memory, - XML_STATUS_OK otherwise. -*/ -XMLPARSEAPI(enum XML_Status) -XML_SetBase(XML_Parser parser, const XML_Char *base); - -XMLPARSEAPI(const XML_Char *) -XML_GetBase(XML_Parser parser); - -/* Returns the number of the attribute/value pairs passed in last call - to the XML_StartElementHandler that were specified in the start-tag - rather than defaulted. Each attribute/value pair counts as 2; thus - this correspondds to an index into the atts array passed to the - XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetSpecifiedAttributeCount(XML_Parser parser); - -/* Returns the index of the ID attribute passed in the last call to - XML_StartElementHandler, or -1 if there is no ID attribute. Each - attribute/value pair counts as 2; thus this correspondds to an - index into the atts array passed to the XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetIdAttributeIndex(XML_Parser parser); - -/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is - detected. The last call to XML_Parse must have isFinal true; len - may be zero for this call (or any other). - - Though the return values for these functions has always been - described as a Boolean value, the implementation, at least for the - 1.95.x series, has always returned exactly one of the XML_Status - values. -*/ -XMLPARSEAPI(enum XML_Status) -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); - -XMLPARSEAPI(void *) -XML_GetBuffer(XML_Parser parser, int len); - -XMLPARSEAPI(enum XML_Status) -XML_ParseBuffer(XML_Parser parser, int len, int isFinal); - -/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. - Must be called from within a call-back handler, except when aborting - (resumable = 0) an already suspended parser. Some call-backs may - still follow because they would otherwise get lost. Examples: - - endElementHandler() for empty elements when stopped in - startElementHandler(), - - endNameSpaceDeclHandler() when stopped in endElementHandler(), - and possibly others. - - Can be called from most handlers, including DTD related call-backs, - except when parsing an external parameter entity and resumable != 0. - Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. - Possible error codes: - - XML_ERROR_SUSPENDED: when suspending an already suspended parser. - - XML_ERROR_FINISHED: when the parser has already finished. - - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. - - When resumable != 0 (true) then parsing is suspended, that is, - XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. - Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() - return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. - - *Note*: - This will be applied to the current parser instance only, that is, if - there is a parent parser then it will continue parsing when the - externalEntityRefHandler() returns. It is up to the implementation of - the externalEntityRefHandler() to call XML_StopParser() on the parent - parser (recursively), if one wants to stop parsing altogether. - - When suspended, parsing can be resumed by calling XML_ResumeParser(). -*/ -XMLPARSEAPI(enum XML_Status) -XML_StopParser(XML_Parser parser, XML_Bool resumable); - -/* Resumes parsing after it has been suspended with XML_StopParser(). - Must not be called from within a handler call-back. Returns same - status codes as XML_Parse() or XML_ParseBuffer(). - Additional error code XML_ERROR_NOT_SUSPENDED possible. - - *Note*: - This must be called on the most deeply nested child parser instance - first, and on its parent parser only after the child parser has finished, - to be applied recursively until the document entity's parser is restarted. - That is, the parent parser will not resume by itself and it is up to the - application to call XML_ResumeParser() on it at the appropriate moment. -*/ -XMLPARSEAPI(enum XML_Status) -XML_ResumeParser(XML_Parser parser); - -enum XML_Parsing { - XML_INITIALIZED, - XML_PARSING, - XML_FINISHED, - XML_SUSPENDED -}; - -typedef struct { - enum XML_Parsing parsing; - XML_Bool finalBuffer; -} XML_ParsingStatus; - -/* Returns status of parser with respect to being initialized, parsing, - finished, or suspended and processing the final buffer. - XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, - XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED -*/ -XMLPARSEAPI(void) -XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); - -/* Creates an XML_Parser object that can parse an external general - entity; context is a '\0'-terminated string specifying the parse - context; encoding is a '\0'-terminated string giving the name of - the externally specified encoding, or NULL if there is no - externally specified encoding. The context string consists of a - sequence of tokens separated by formfeeds (\f); a token consisting - of a name specifies that the general entity of the name is open; a - token of the form prefix=uri specifies the namespace for a - particular prefix; a token of the form =uri specifies the default - namespace. This can be called at any point after the first call to - an ExternalEntityRefHandler so longer as the parser has not yet - been freed. The new parser is completely independent and may - safely be used in a separate thread. The handlers and userData are - initialized from the parser argument. Returns NULL if out of memory. - Otherwise returns a new XML_Parser object. -*/ -XMLPARSEAPI(XML_Parser) -XML_ExternalEntityParserCreate(XML_Parser parser, - const XML_Char *context, - const XML_Char *encoding); - -enum XML_ParamEntityParsing { - XML_PARAM_ENTITY_PARSING_NEVER, - XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, - XML_PARAM_ENTITY_PARSING_ALWAYS -}; - -/* Controls parsing of parameter entities (including the external DTD - subset). If parsing of parameter entities is enabled, then - references to external parameter entities (including the external - DTD subset) will be passed to the handler set with - XML_SetExternalEntityRefHandler. The context passed will be 0. - - Unlike external general entities, external parameter entities can - only be parsed synchronously. If the external parameter entity is - to be parsed, it must be parsed during the call to the external - entity ref handler: the complete sequence of - XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and - XML_ParserFree calls must be made during this call. After - XML_ExternalEntityParserCreate has been called to create the parser - for the external parameter entity (context must be 0 for this - call), it is illegal to make any calls on the old parser until - XML_ParserFree has been called on the newly created parser. - If the library has been compiled without support for parameter - entity parsing (ie without XML_DTD being defined), then - XML_SetParamEntityParsing will return 0 if parsing of parameter - entities is requested; otherwise it will return non-zero. - Note: If XML_SetParamEntityParsing is called after XML_Parse or - XML_ParseBuffer, then it has no effect and will always return 0. -*/ -XMLPARSEAPI(int) -XML_SetParamEntityParsing(XML_Parser parser, - enum XML_ParamEntityParsing parsing); - -/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then - XML_GetErrorCode returns information about the error. -*/ -XMLPARSEAPI(enum XML_Error) -XML_GetErrorCode(XML_Parser parser); - -/* These functions return information about the current parse - location. They may be called from any callback called to report - some parse event; in this case the location is the location of the - first of the sequence of characters that generated the event. When - called from callbacks generated by declarations in the document - prologue, the location identified isn't as neatly defined, but will - be within the relevant markup. When called outside of the callback - functions, the position indicated will be just past the last parse - event (regardless of whether there was an associated callback). - - They may also be called after returning from a call to XML_Parse - or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then - the location is the location of the character at which the error - was detected; otherwise the location is the location of the last - parse event, as described above. -*/ -XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); -XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); -XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); - -/* Return the number of bytes in the current event. - Returns 0 if the event is in an internal entity. -*/ -XMLPARSEAPI(int) -XML_GetCurrentByteCount(XML_Parser parser); - -/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets - the integer pointed to by offset to the offset within this buffer - of the current parse position, and sets the integer pointed to by size - to the size of this buffer (the number of input bytes). Otherwise - returns a NULL pointer. Also returns a NULL pointer if a parse isn't - active. - - NOTE: The character pointer returned should not be used outside - the handler that makes the call. -*/ -XMLPARSEAPI(const char *) -XML_GetInputContext(XML_Parser parser, - int *offset, - int *size); - -/* For backwards compatibility with previous versions. */ -#define XML_GetErrorLineNumber XML_GetCurrentLineNumber -#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber -#define XML_GetErrorByteIndex XML_GetCurrentByteIndex - -/* Frees the content model passed to the element declaration handler */ -XMLPARSEAPI(void) -XML_FreeContentModel(XML_Parser parser, XML_Content *model); - -/* Exposing the memory handling functions used in Expat */ -XMLPARSEAPI(void *) -XML_MemMalloc(XML_Parser parser, size_t size); - -XMLPARSEAPI(void *) -XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); - -XMLPARSEAPI(void) -XML_MemFree(XML_Parser parser, void *ptr); - -/* Frees memory used by the parser. */ -XMLPARSEAPI(void) -XML_ParserFree(XML_Parser parser); - -/* Returns a string describing the error. */ -XMLPARSEAPI(const XML_LChar *) -XML_ErrorString(enum XML_Error code); - -/* Return a string containing the version number of this expat */ -XMLPARSEAPI(const XML_LChar *) -XML_ExpatVersion(void); - -typedef struct { - int major; - int minor; - int micro; -} XML_Expat_Version; - -/* Return an XML_Expat_Version structure containing numeric version - number information for this version of expat. -*/ -XMLPARSEAPI(XML_Expat_Version) -XML_ExpatVersionInfo(void); - -/* Added in Expat 1.95.5. */ -enum XML_FeatureEnum { - XML_FEATURE_END = 0, - XML_FEATURE_UNICODE, - XML_FEATURE_UNICODE_WCHAR_T, - XML_FEATURE_DTD, - XML_FEATURE_CONTEXT_BYTES, - XML_FEATURE_MIN_SIZE, - XML_FEATURE_SIZEOF_XML_CHAR, - XML_FEATURE_SIZEOF_XML_LCHAR, - XML_FEATURE_NS - /* Additional features must be added to the end of this enum. */ -}; - -typedef struct { - enum XML_FeatureEnum feature; - const XML_LChar *name; - long int value; -} XML_Feature; - -XMLPARSEAPI(const XML_Feature *) -XML_GetFeatureList(void); - - -/* Expat follows the GNU/Linux convention of odd number minor version for - beta/development releases and even number minor version for stable - releases. Micro is bumped with each release, and set to 0 with each - change to major or minor version. -*/ -#define XML_MAJOR_VERSION 2 -#define XML_MINOR_VERSION 0 -#define XML_MICRO_VERSION 0 - -#ifdef __cplusplus -} -#endif - -#endif /* not Expat_INCLUDED */ diff --git a/gpsbabel/msvc/Expatw/expat_external.h b/gpsbabel/msvc/Expatw/expat_external.h deleted file mode 100644 index 4cd16923c..000000000 --- a/gpsbabel/msvc/Expatw/expat_external.h +++ /dev/null @@ -1,115 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - See the file COPYING for copying permission. -*/ - -#ifndef Expat_External_INCLUDED -#define Expat_External_INCLUDED 1 - -/* External API definitions */ - -#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) -#define XML_USE_MSC_EXTENSIONS 1 -#endif - -/* Expat tries very hard to make the API boundary very specifically - defined. There are two macros defined to control this boundary; - each of these can be defined before including this header to - achieve some different behavior, but doing so it not recommended or - tested frequently. - - XMLCALL - The calling convention to use for all calls across the - "library boundary." This will default to cdecl, and - try really hard to tell the compiler that's what we - want. - - XMLIMPORT - Whatever magic is needed to note that a function is - to be imported from a dynamically loaded library - (.dll, .so, or .sl, depending on your platform). - - The XMLCALL macro was added in Expat 1.95.7. The only one which is - expected to be directly useful in client code is XMLCALL. - - Note that on at least some Unix versions, the Expat library must be - compiled with the cdecl calling convention as the default since - system headers may assume the cdecl convention. -*/ -#ifndef XMLCALL -#if defined(XML_USE_MSC_EXTENSIONS) -#define XMLCALL __cdecl -#elif defined(__GNUC__) && defined(__i386) -#define XMLCALL __attribute__((cdecl)) -#else -/* For any platform which uses this definition and supports more than - one calling convention, we need to extend this definition to - declare the convention used on that platform, if it's possible to - do so. - - If this is the case for your platform, please file a bug report - with information on how to identify your platform via the C - pre-processor and how to specify the same calling convention as the - platform's malloc() implementation. -*/ -#define XMLCALL -#endif -#endif /* not defined XMLCALL */ - - -#if !defined(XML_STATIC) && !defined(XMLIMPORT) -#ifndef XML_BUILDING_EXPAT -/* using Expat from an application */ - -#ifdef XML_USE_MSC_EXTENSIONS -#define XMLIMPORT __declspec(dllimport) -#endif - -#endif -#endif /* not defined XML_STATIC */ - - -/* If we didn't define it above, define it away: */ -#ifndef XMLIMPORT -#define XMLIMPORT -#endif - - -#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef XML_UNICODE_WCHAR_T -#define XML_UNICODE -#endif - -#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ -#ifdef XML_UNICODE_WCHAR_T -typedef wchar_t XML_Char; -typedef wchar_t XML_LChar; -#else -typedef unsigned short XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE_WCHAR_T */ -#else /* Information is UTF-8 encoded. */ -typedef char XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE */ - -#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ -#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 -typedef __int64 XML_Index; -typedef unsigned __int64 XML_Size; -#else -typedef long long XML_Index; -typedef unsigned long long XML_Size; -#endif -#else -typedef long XML_Index; -typedef unsigned long XML_Size; -#endif /* XML_LARGE_SIZE */ - -#ifdef __cplusplus -} -#endif - -#endif /* not Expat_External_INCLUDED */ diff --git a/gpsbabel/msvc/Expatw/libexpatw.dll b/gpsbabel/msvc/Expatw/libexpatw.dll deleted file mode 100644 index 9aaa5a826f4bafaeef0061096e140710d5374a63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151552 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 lt%yz?R*WNJ{E14`M|t5!Ky